劍指offerDay23----整數中1出現的次數(從1到n整數中1出現的次數)

題目:求出1~13的整數中1出現的次數,并算出100~1300的整數中1出現的次數襟雷?為此他特別數了一下1~13中包含1的數字有1、10仁烹、11耸弄、12、13因此共出現6次,但是對于后面問題他就沒轍了晃危。ACMer希望你們幫幫他,并把問題更加普遍化,可以很快的求出任意非負整數區(qū)間中1出現的次數(從1 到 n 中1出現的次數)叙赚。

思路:

方法一:

??直接一個數字一個數字的計算每個數字1出現的次數,并返回其和僚饭。

方法二:

個位

個位數上震叮,1會每隔10出現一次,例如1鳍鸵、11苇瓣、21等等,以10為一個階梯的話偿乖,每一個完整的階梯里面都有一個1击罪,例如數字22,按照10為間隔來分三個階梯贪薪,在完整階梯0-9媳禁,10-19之中都有一個1,但是19之后有一個不完整的階梯画切,需要去判斷這個階梯中會不會出現1竣稽,易推斷知,如果最后這個露出來的部分小于1霍弹,則不可能出現1(這個歸納換做其它數字也成立)毫别。

歸納出個位上1出現的個數為:

n/10 * 1+(n%10!=0 ? 1 : 0)

十位

十位數上出現1的情況應該是10-19,依然沿用分析個位數時候的階梯理論典格,10-19這組數岛宦,每隔100出現一次,這次階梯是100耍缴,例如數字317砾肺,分析有階梯0-99,100-199防嗡,200-299三段完整階梯变汪,每一段階梯里面都會出現10次1(從10-19),最后分析露出來的那段不完整的階梯本鸣。如果露出來的數大于19疫衩,那么直接算10個1就行了硅蹦,因為10-19肯定會出現荣德;如果小于10闷煤,那么肯定不會出現十位數的1;如果在10-19之間的涮瞻,計算結果應該是k - 10 + 1鲤拿。例如分析300-317,17這個數字署咽,1出現的個數應該是17-10+1=8個近顷。

那么現在可以歸納:十位上1出現的個數為:

  • 設k = n % 100,即為不完整階梯段的數字
  • 歸納式為:(n / 100) * 10 + (if(k > 19) 10 else if(k < 10) 0 else k - 10 + 1)

百位

在百位宁否,100-199都會出現百位1窒升,一共出現100次,階梯間隔為1000慕匠,100-199這組數饱须,每隔1000就會出現一次。假設數為2139台谊。跟上述思想一致蓉媳,先算階梯數 * 完整階梯中1在百位出現的個數,即n/1000 * 100得到前兩個階梯中1的個數锅铅,那么再算漏出來的部分139酪呻,沿用上述思想,不完整階梯數k199盐须,得到100個百位1玩荠,100<=k<=199則得到k - 100 + 1個百位1。

那么歸納百位上出現1的個數:

  • 設k = n % 1000
  • 歸納式為:(n / 1000) * 100 + (if(k >199) 100 else if(k < 100) 0 else k - 100 + 1)

后面的依次類推....

再次回顧個位

把個位數上算1的個數的式子也納入歸納式中

  • k = n % 10
  • 個位數上1的個數為:n / 10 * 1 + (if(k > 1) 1 else if(k < 1) 0 else k - 1 + 1)

設i為計算1所在的位數丰歌,i=1表示計算個位數的1的個數姨蟋,10表示計算十位數的1的個數等等。

  • k = n % (i * 10)
  • count(i) = (n / (i * 10)) * i + (if(k > i * 2 - 1) i else if(k < i) 0 else k - i + 1)

好了立帖,這樣從10到10的n次方的歸納就完成了眼溶。

  • sum1 = sum(count(i)),i = Math.pow(10, j), 0<=j<=log10(n)

源碼:GitHub源碼

方法一:

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int sum = 0;
        for(int i = 1;i <= n;i++){
            int temp = i;
            while(temp != 0){
                if(temp % 10 == 1) sum++;
                temp = temp / 10;
            }
        }
        return sum;
    }
}

方法二:

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        if(n <= 0) return 0;
        int count = 0;
        for(int i = 1;i <= n;i *= 10){
            int sum = i * 10;
            count += (n / sum) * i;
            if((n % sum) > (i * 2 - 1)) count += i;
            else if(n % sum < i) ;
            else count += n % sum - i + 1;
        }
        return count;
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末晓勇,一起剝皮案震驚了整個濱河市堂飞,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绑咱,老刑警劉巖绰筛,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異描融,居然都是意外死亡铝噩,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門窿克,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骏庸,“玉大人毛甲,你說我怎么就攤上這事【弑唬” “怎么了玻募?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長一姿。 經常有香客問我七咧,道長,這世上最難降的妖魔是什么叮叹? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任艾栋,我火速辦了婚禮,結果婚禮上蛉顽,老公的妹妹穿的比我還像新娘裹粤。我一直安慰自己,他們只是感情好蜂林,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布遥诉。 她就那樣靜靜地躺著,像睡著了一般噪叙。 火紅的嫁衣襯著肌膚如雪矮锈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天睁蕾,我揣著相機與錄音苞笨,去河邊找鬼。 笑死子眶,一個胖子當著我的面吹牛瀑凝,可吹牛的內容都是我干的。 我是一名探鬼主播臭杰,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼粤咪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渴杆?” 一聲冷哼從身側響起寥枝,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磁奖,沒想到半個月后囊拜,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡比搭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年冠跷,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜜托,死狀恐怖弟疆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情盗冷,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布同廉,位于F島的核電站仪糖,受9級特大地震影響,放射性物質發(fā)生泄漏迫肖。R本人自食惡果不足惜锅劝,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟆湖。 院中可真熱鬧故爵,春花似錦、人聲如沸隅津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伦仍。三九已至结窘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充蓝,已是汗流浹背隧枫。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谓苟,地道東北人官脓。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像涝焙,于是被迫代替她去往敵國和親卑笨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容