刨根究底才能记忆深刻。
算法题:给定一个数字 k
,计算 k
在 0 到 n 中出现的次数,k
可能是 0 到 9 的一个值。
给出的标准答案之一为:
public int digitCounts(int k, int n) {
// write your code here
int sum= k==0? 1:0;
for (int i = 0; i <=n ; i++) {
if(i<k)continue;
int tmp=i;
while(tmp>0){
if(tmp%10==k)sum++;
tmp/=10;
}
}
return sum;
}
比如0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
判定其中2出现的次数。
代码就是首先判断K为0的情况,int sum= k==0? 1:0;
当K为0是,次数sum 直接为1,因为从0开始的嘛。
if(tmp%10==k)sum++; 就是取余,比如tem为22,余数为2,次数sum +1,
tmp/=10,取商,tmp就为2,再进来余数是2,次数sum +1,再除10取商,就出去循环了。
就是把上面数组,所有的数拆分成个位数,然后分别与K进行比较。