題目: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 到...