描述
计算数字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)
解答:
当某一位的数字小于i时,那么该位出现i的次数为:更高位数字x当前位数
当某一位的数字等于i时,那么该位出现i的次数为:更高位数字x当前位数+低位数字+1
当某一位的数字大于i时,那么该位出现i的次数为:(更高位数字+1)x当前位数
归纳:
设一个整数为abcdef(六位数),current表示当前正在统计的i位上的数字大小(i=10的话,current=e i=1000的话,current=c)
before为current之前的所有数字,after为current之后的所有数字(current=d的话,before=abc,after=ef)
举例:534898 current=4 before=53 after=898
从个位开始统计。直到统计完所有位。
int digitCounts(int k, int n) { int current=before=after=0; int i=1,n_count=0; while(n/i!=0){ current=(n/i)%10; before=n/(i*10); after=n-n/i*i; if(current>k) n_count=n_count+(before+1)*i; else if(current
上一篇:Lintcode-2:尾部的零
下一篇:Lintcode-4:丑数 II