问题描述
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
样例
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
我们发现1出现了5次 (1, 10, 11, 12)
求解
先给出最朴素的解法:
遍历 0 到 n,如果是一位数,直接和 k 比较,如果是两位及两位以上的数,
从低到高逐位和 k 比较。这里没有将一位数的算法和多位数的算法统一起来,
是因为 k = 0 时比较特殊,多位数最高位一定不是 0,而一位数可能是0
// Time: O(n)
// Space: O(1)
class Solution {
public:
/*
* param k : As description.
* param n : As description.
* return: How many k's between 0 and n.
*/
int digitCounts(int k, int n) {
int cnt = 0;
for (int i = 0; i <= n; ++i) {
int num = i;
while (num >= 10) {
if (num % 10 == k) {
++cnt;
}
num /= 10;
}
if (num == k) {
++cnt;
}
}
return cnt;
}
};