美文网首页
LintCode:3 · 统计数字

LintCode:3 · 统计数字

作者: alex很累 | 来源:发表于2022-01-17 22:51 被阅读0次

    问题描述

    给定一个数字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;
        }
    }
    

    相关文章

      网友评论

          本文标题:LintCode:3 · 统计数字

          本文链接:https://www.haomeiwen.com/subject/ipyhhrtx.html