LintCode:3 · 统计数字

2022-01-17  本文已影响0人  alex很累

问题描述

给定一个数字k,计算 k 在 0 到 n 中出现的次数,k 可能是 09 的一个值。

样例

输入:
k = 1
n = 12

输出:
5

解释:
在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,1、10、11、12 中均出现了 1,其中 11 中出现了 2 次 1,故1出现 5 次。

解题思路

直接暴力解题,写一个循环,对循环中每个数进行拆分(1:运用算数拆数;2:转成字符串再拆成byte数组),判断下是不是等于k。

代码示例(JAVA)

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) {
        // n比k小,直接结束
        if (n < k) {
            return 0;
        }
        
        // 循环第一个匹配上的必定是=k,直接从k+1开始
        int result = 1;
        for (int i = k + 1; i <= n; i++) {
            for (int j = i; j > 0; j = j / 10) {
                if (j % 10 == k) {
                    result++;
                }
            }
        }

        return result;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读