劍指offer 整數中1出現的次數

2021-09-29 14:52:43 字數 1219 閱讀 2064

時間限制:1秒 空間限制:32768k 熱度指數:244020

本題知識點: 查詢

數學求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。

這題一看就知道是遞推找規律的題目。但是,思路不清晰,找錯了啊。。。

這裡引用以下牛油的分析思路吧!分析的清楚透徹。

當n = 3141592時:ma

bones

13141592

0(3141592+8)/10*1+0=314160

10314159

2(314159+8)/10*10+0=314160

10031415

92(31415+8)/10*100+0=314200

1000

3141

592(3141+8)/101000+1(592+1)=314593

當然後面還有m=10000,100000,1000000三種情況,對應著萬位,十萬位, 百萬位為1時的情況

下面說下a+8的意義:

當考慮個位,十位,百位這三位為1的情況時:

個位 2 ,當個位取值1時,前面的六位數字可由0~314159組成,即314160種情況

十位9,當十位取值1時,前面的五位數字可由0~31415組成,十位之後的一位可由0~9組成,組合情況31416*10=314160種情況

百位5,當百位取值為1時,前面的四位數字可由0~3141組成,百位之後的兩位可由0~99組成,組合情況為3142*100=314200種情況

注意:當考慮千位1時:

千位1,千位取值即1,前面的三位數字可由0~314組成,但是當前面的值為314時,後面的三位只有0~592種情況(特殊情況),其餘的情況即為前面的值為0~313,後面三位有0~999,情況數為3141000,所以總情況數為3141000 + 593=314593種情況

這時可發現和**中的公式算的情況是吻合的,a+8的巧妙之處在於當a的最後一位(當前分析位)為0或1時,加8不產生進製,這是為需要單獨算的特殊情況做準備,而當前分析位為2~9時,不需要考慮特殊情況,所以允許加8產生的進製。

class solution 

return res;

}};

劍指offer 整數中1出現的次數

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。這是劍指offer...

整數中1出現的次數(劍指offer)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1...

劍指Offer 整數中1出現的次數

時間限制 1秒 空間限制 32768k 熱度指數 226203 本題知識點 查詢數學 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他...