《劍指Offer》31 整數中1出現的次數

2021-09-11 03:26:17 字數 925 閱讀 5253

題目:31. 整數中1出現的次數

知識點:優化

題目描述:

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

解題思路:

解法一:簡單粗暴的挨個數字進行判斷,時間複雜度為 o(nlogn)。

解法二:使用遞迴的方法,每次去除首位數字,對剩餘的數字進行處理,比如 21345,首先考慮首位存在的情況,第一部分因為首位大於 1 ,所以以 1 為首位的數字存在 10000~19999 共有一萬個,然後第二部分刨除首位為 1 的情況,即只看剩下的四位 1346~21345 中的情況,因為剩下的四位中必有一位為 1 ,所以根據排列組合的原則,應存在 首位 * 去除首位後的位數 * 10^去除首位和任意一位後的位數 個包含 1 的數字,兩種情況計算完之後再遞迴的求解第三部分,即去掉首位後 1~1345 中的情況,再進行相加,時間複雜度應為 o(logn)。

**:

//解法一(自研):

int numberof1between1andn_solution(int n)

}return res;

}//解答二(劍指offer):

int numberof1between1andn_solution2(int n)

int numberof1(const char* strn)

int powerbase10(unsigned int n)

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

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

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

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

《劍指offer》 31 整數1出現的次數

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