數字1的個數
題目:
給定一個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。
示例:
輸入: 13
輸出: 6
解釋: 數字 1 出現在以下數字中: 1, 10, 11, 12, 13 。
思路分析:
暴力法處理:從1到n遍歷這n個數,找出每個數中1的個數,時間複雜度爲O(nlogn)。 在測試中,發現當n較大時,會出現超時。
初步代碼:
class Solution {
public:
int countDigitOne(int n) {
int count = 0;
for (int i = 1; i <= n; ++i) {
int num = i;
while (num) {
if (num % 10 == 1) {
++count;
}
num /= 10;
}
}
return count;
}
};
優化:
把n分解找規律。