计算数字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的特殊情况,具体代码中有。
class Solution {
public:
/*
* @param : An integer
* @param : 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;
for(int i=0;i<=n;i++)
count += contain(k,i);
return count;
}
//返回数字n分解后存在k的次数
int contain(int k,int n)
{
//特别注意!由于下面while(n)会忽略掉当n=0的情况,所以需要额外考虑
if(n == 0 && k == 0)
return 1;
int count = 0;
while(n)
{
if(k == n%10)
count++;
n /= 10;
}
return count;
}
};
JAVA代码:
public class Solution {
/**
* @param k: An integer
* @param n: An integer
* @return: An integer denote the count of digit k in 1..n
*/
public int digitCounts(int k, int n) {
// write your code here
int res = 0;
for(int i=0 ; i<=n ; i++){
res += help(k,i);
}
return res;
}
public static int help(int k , int num){
if(k==0 && num==0)
return 1;
int res = 0;
while(num != 0){
if(num%10 == k)
res++;
num /= 10;
}
return res;
}
}