统计数字
每天一道算法题
问题
- 描述
- 计算数字 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;
}
| 原文请点击此处 |
|---|

浙公网安备 33010602011771号