ount the number of k's between 0 and n. k can be 0 - 9.
Example
if n = 12
, k = 1
in
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
最后考虑首位为0的特殊情况,如k=0,n=19,当计算到1的位置时,共有0, 10, 01,02,03,04,05,06,07,08,09,所以需要在计算到最高位时,减去首位为0的情况。
class Solution {
/*
* param k : As description.
* param n : As description.
* return: An integer denote the count of digit k in 1..n
*/
public int digitCounts(int k, int n) {
if(k < 0 || k > 9) return -1;
int low = 0, cur = 0, high = 0;
int count = 0, factor = 1;
while(n / factor > 0) {
low = n - (n / factor) * factor;
high = n / (factor * 10);
cur = (n / factor) % 10;
if(cur < k)
count += high * factor;
else if(cur == k)
count += high * factor + low + 1;
else
count += (high + 1) * factor;
factor *= 10;
}
if(n == 0 && k == 0) return 1;
else return k == 0 && n > 9 ? count - factor / 10 : count;
}
};