您的位置:首页 > 其它

digit-counts

2015-11-02 13:35 232 查看
计算数字k在0到n中的出现的次数,k可能是0~9的一个值

您在真实的面试中是否遇到过这个题?

Yes

样例

例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)
暴力解法:

class Solution {
public:
int digitCounts(int k, int n) {
int ans=0;
for(int i=0;i<=n;i++){
ans+=count(i,k);
}
return ans;
}
int count(int num,int k){
string tmp=to_string(num);
int res=0;
for(int i=0;i<tmp.size();i++){
if(tmp[i]-'0'==k) res++;
}
return res;
}
};


线性时间复杂度O(n):

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) {
// write your code here
if(n==0){
return k==0?1:0;
}

int digits=0;
int p=1;
while(n>=p){
digits++;
p*=10;
}
int back=0;
int cur=n%10;
int pre=n/10;

int res=0;
int cnt=1;
while(cnt<=digits){
if(cur>k){
res+=(pre+1)*pow(10,cnt-1);
}else if(cur==k){
res+=pre*pow(10,cnt-1)+back+1;
}else{
res+=pre*pow(10,cnt-1);
}
back=cur*pow(10,cnt-1)+back;
cur=pre%10;
pre=pre/10;
cnt++;
}
return k==0?res-10:res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: