统计数字

每天一道算法题

问题

  • 描述
    • 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。
  • 示例
    • 输入: k = 1,n = 12
    • 输出:5
    • 解释:在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我们发现 1 出现了 5 次 (1, 10, 11, 12)。

解决

首先先解决这个问题的子问题,即计算一个个位数 k 在一个任意整数 n 中的出现的次数。

只要将整数 n 各个位上的数字单独取出来与 k 比对,如果相同则次数加一,这样子问题就解决了。

代码如下

    public int singleCount(int k, int n) {
        int count = 0;
        do {
            if (n % 10 == k) {
                count++;
            }
            n /= 10;
        } while (n > 0);
        return count;
    }

解决了上述子问题,对于这个总的问题,只需从 0 到 n 进行遍历,然后将 n 个子问题的结果相加即可!

    public static int digitCounts(int k, int n) {
        int count = 0;
        while (n >= 0) {
            count += singleCounts(k,n--);
        }
        return count;
    }
原文请点击此处
posted @ 2020-04-21 00:41  GoodBoyDing  阅读(13)  评论(0)    收藏  举报