数字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分解找规律。