题目:
计算数字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)
分析:
对每个数字number进行遍历,从个位开始,逐一判断是否等于我们要找的数字k,若个位数字等于k,计数加一;若个位数字不等于k,则对数字number除10取整(number/=10,其实就是将个位前一位数字移到个位所在位置),接着循环。最后计算所有数字中出现数字k的次数总和。
代码实现:
C++:
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 sum=0;
int i,m;
if(k==0) //防止i从0开始,先提前判断一步,从而使得接下来i从0开始
{
sum=1;
}
for(i=1;i<=n;i++)
{
int sum1=0; //sum1为单个数字包含数字k的计数变量
int number = i;
while(number>0)
{
m=number%10;
if(m==k)
{
sum1++;
}
number/=10;
}
sum += sum1; //所有次数总和
}
return sum;
}
};