计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。
样例
样例 1:
输入:
k = 1, n = 1
输出:
1
解释:
在 [0, 1] 中,我们发现 1 出现了 1 次 (1)。
样例 2:
输入:
k = 1, n = 12
输出:
5
解释:
在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我们发现 1 出现了 5 次 (1, 10, 11, 12)(注意11中有两个1)。
class Solution {
public:
/**
* @param k: An integer
* @param n: An integer
* @return: An integer denote the count of digit k in 1..n
*/
int digitCounts(int k, int n) {
// write your code here
int count=0;
int i=0;
int value=-1; //考虑0的情况
int last_one=-1; //考虑0的情况
while(i<=n){
if(value==-1){
value=i;
}
if(value!=0){ //考虑非0 的情况
last_one=value%10; //最后一位
value=value/10; //抛弃最低位
}
if(last_one==k){
count++;
}
if(value==0){
if(k==i&&i==0)//处理特殊情况
count++;
value=-1; //重置value值
i++; //前进一步
}
}
return count;
}
};
算法设计思想:
- 不断的抛出最低的个位数且缩小当前数字的大小;
- 直到当前数值缩小为0时,处理下个数值;
网友评论