整數(shù)中1出現(xiàn)的次數(shù)

題目描述

輸入一個(gè)整數(shù)n,求1n這n個(gè)整數(shù)的十進(jìn)制表示中1出現(xiàn)的次數(shù)曼氛。例如豁辉,輸入12,112這些整數(shù)中包含1的數(shù)字有1搪锣、10秋忙、11和12,1一共出現(xiàn)了5次构舟。

解法一:

遍歷所有的數(shù)字,不停地將數(shù)字i%10,i/10狗超,求得每個(gè)數(shù)字含有1的個(gè)數(shù)弹澎。每個(gè)數(shù)字i有l(wèi)ogi位,所以時(shí)間復(fù)雜度為O(nlogn)努咐。效率很慢苦蒿,不推薦。

解法二:

觀察數(shù)字規(guī)律渗稍。
假如n=23佩迟,即序列為1,2竿屹,3报强,4,5拱燃,6秉溉,7,8碗誉,9召嘶,10,11哮缺,12弄跌,13,14尝苇,15碟绑,16,17茎匠,18格仲,19,20诵冒,21凯肋,22,23
1-9中共有1個(gè)1汽馋,
10-19中每個(gè)數(shù)字的開頭都有1侮东,如果不考慮開頭的1,則變?yōu)榍?-9中1的個(gè)數(shù)豹芯,與1-9中1的個(gè)數(shù)相同悄雅。10-19一共10個(gè)數(shù)字,算上每個(gè)開頭都有的1铁蹈,加上0-9中1的個(gè)數(shù)宽闲,一共有11個(gè)1,
20-23中每個(gè)數(shù)字的開頭為2,可以不考慮容诬,則變?yōu)榍?-3中1的個(gè)數(shù)娩梨,則20-23中共1個(gè)1
所以1-19中共有13個(gè)1。
由此我們可以看出览徒,位數(shù)更多的數(shù)是由位數(shù)更低的數(shù)組成的狈定,以1-20為例,
我們只需要知道含有多少組0-9习蓬,(為了與10之類的低位0符合纽什,采用0~9而不是1-9),也即各位為1的數(shù)量躲叼,則序列退化為0芦缰,0,0押赊,0饺藤,0,0流礁,0涕俗,0,0神帅,0再姑,10,10找御,10元镀,10,10霎桅,10栖疑,10,10滔驶,10遇革,10,20揭糕,20萝快,20,20著角,
再統(tǒng)計(jì)有多少組10即可揪漩,也即十位為1的數(shù)量。
可以推而廣之吏口,知道任何一位1的數(shù)量奄容,最后相加即可得到1的總數(shù)量冰更。
個(gè)位1的數(shù)量,我們可以計(jì)算n/10的值i1嫩海,n%10的值y1冬殃,若y1>=1囚痴,則s1=i1+1叁怪,若y1=0,則s1=i1
十位1的數(shù)量深滚,我們可以計(jì)算n/100的值i2奕谭,n%100的值y2,若y2>=20痴荐,則s2=i2 * 10+10血柳,若10<=y2<20,則s2=i2 * 10 + y2 % 10 + 1生兆,若0<=y2<10,則s2=i2 * 10
百位1的數(shù)量难捌,我們可以計(jì)算n/1000的值i3,n%1000的值y3鸦难,若y3>=200根吁,則s3=i3 * 100 + 100,若100<=y3<200合蔽,則s3=i2 * 100 + y3 % 100 + 1, 若0<=y3<100击敌,則s3=i3 * 100
……
……
所以個(gè)位1的數(shù)量也可以寫成
個(gè)位1的數(shù)量,我們可以計(jì)算n/10的值i1拴事,n%10的值y1沃斤,若y1>=2,則s1=i1 * 1 + 1刃宵,若1<=y1<2衡瓶,則s1=i1 * 1 + y1 % 1 + 1,若0<=y1<1牲证,則s1=i1*1
于是可以通過循環(huán)很簡單來實(shí)現(xiàn)哮针,時(shí)間復(fù)雜度為O(logn)

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int num = n;
        int divisor = 1;
        int sum = 0;
        while(num / 10.0 > 0) {
            int i = n / (divisor * 10);
            int y = n % (divisor * 10);
            if(y >=  2 * divisor) {
                sum += i * divisor + divisor;
            }
            else if(y >= divisor && y < 2 * divisor){
                sum += i * divisor + y % divisor + 1;
            }
            else {
                sum += i * divisor;
            }
            divisor *= 10;
            num /= 10;
        }
        return sum;
    }
}

注意循環(huán)條件為num/10.0而不是num/10,這是為了保證只有個(gè)位數(shù)的情況从隆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诚撵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子键闺,更是在濱河造成了極大的恐慌寿烟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛燥,死亡現(xiàn)場離奇詭異筛武,居然都是意外死亡缝其,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門徘六,熙熙樓的掌柜王于貴愁眉苦臉地迎上來内边,“玉大人,你說我怎么就攤上這事待锈∧洌” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵竿音,是天一觀的道長和屎。 經(jīng)常有香客問我,道長春瞬,這世上最難降的妖魔是什么柴信? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宽气,結(jié)果婚禮上随常,老公的妹妹穿的比我還像新娘。我一直安慰自己萄涯,他們只是感情好绪氛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窃判,像睡著了一般钞楼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袄琳,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天询件,我揣著相機(jī)與錄音,去河邊找鬼唆樊。 笑死宛琅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逗旁。 我是一名探鬼主播嘿辟,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼片效!你這毒婦竟也來了红伦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤淀衣,失蹤者是張志新(化名)和其女友劉穎昙读,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膨桥,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛮浑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年唠叛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沮稚。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艺沼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕴掏,到底是詐尸還是另有隱情障般,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布囚似,位于F島的核電站剩拢,受9級特大地震影響线得,放射性物質(zhì)發(fā)生泄漏饶唤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一贯钩、第九天 我趴在偏房一處隱蔽的房頂上張望募狂。 院中可真熱鬧,春花似錦角雷、人聲如沸祸穷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷滚。三九已至,卻和暖如春吗坚,著一層夾襖步出監(jiān)牢的瞬間祈远,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工商源, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留车份,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓牡彻,卻偏偏與公主長得像扫沼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子庄吼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容