领扣LintCode问题答案-3. 统计数字

领扣LintCode问题答案-3. 统计数字

目录

  • 3. 统计数字
  • 鸣谢

3. 统计数字

计算数字 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)。

public class Solution {
     
    /**
     * @param k: An integer
     * @param n: An integer
     * @return: An integer denote the count of digit k in 1..n
     */
    public int digitCounts(int k, int n) {
     
        // write your code here
		//
		int count = n / 10;
		// 0k
		if (n % 10 >= k) {
     
			count++;
		}

		int p = n;
		int pw = 1;
		while (p >= 10) {
     
			pw *= 10;
			p /= 10;

			int quotient = p / 10;
			int mod      = p % 10;

			int tc;
			if (k > 0) {
     
				tc = quotient * pw;
				if (p >= k) {
     
					if (mod == k) {
     
						tc +=  n % pw + 1;
					} else if (mod > k) {
     
						tc += pw;
					}
				}
			} else {
     
				if (p > 10) {
     
					tc = (quotient - 1) * pw + 1;
				} else {
     
					tc = quotient;
				}
			}

			count += tc;
		}
		return count;
}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

你可能感兴趣的:(算法,算法)