计算数字 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)。
解法一是把n个数字进行组合,变成一个字符串,这样就可以直接进行相等的判别。
#include <string>
using namespace std;
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
n=n+1;
int t=0;
char c='0'+k;
string s="";//保证不为空
string temp;
for(int i=0;i<n;i++)
{
temp = to_string(i);
s+=temp;
}
for(int i=0;i<s.length();i++)
if(c==s[i])
t++;
return t;
}
};
这里使用的C++,要注意两点,其一是k+'0',这就是把数字转化成了对应的字母,也就是ASCII码加了48.其二是to_string函数,可以把数字转化成字符串。
解法二:这种思路就是最基本的思路,将每个数字与k比较,求出相等的数量,但是要注意当数字为0时有特殊情况。
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)
{
int count=0;
for (int i=0; i<=n; i++){
int y=i;
while(y>=k){
int x = y%10;
if (x==k) count++;
y=y/10;
if (y==0&&k==0)break;
}
}
return count;
}
};