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

2022-08-14 05:54:13 字數 965 閱讀 3276

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

核心想法:   求每個位上出現1的次數

如求出現在十位上1的次數

十位出現1的所有組合情況 共10個

1011 只算十位出現的1 算1個

……19

關鍵就是有多少種情況見下圖

依次不同位出現次數累加

int front = 0, current =0,behind = 0

;int

uint = 1; //

第i位對應1後i-1個0

for (int i = 1; i <= max_weight; i++)

front = n/(uint*10); //

去掉後i位

current = (n / (uint)) % 10; //

得到第i位

behind = n % (uint); //

只剩后i-1位

if(current == 0

) else

if(current == 1

) else

if (current > 1) }

return

count;

}

劍指offer系列之三十 整數中1出現的次數

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

劍指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...