我是靠谱客的博主 轻松小兔子,最近开发中收集的这篇文章主要介绍JAVA程序设计:2出现的次数(面试题 17.06),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。

示例:

输入: 25
输出: 9
解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)
提示:

n <= 10^9

思路:本题数位dp是可以无脑过的,而我选择另一种方法,该方法能够处理0~n甚至是任意区间内0到9分别出现的次数,并且写法相对数位dp简洁很多。

具体思路是我们采用递归的形式枚举每一位,对于每一位我们分别看低位对当前位、高位对当前位以及高位对低位的影响即可。

class Solution {

    private int[] ans;

    public int numberOf2sInRange(int n) {
        ans = new int[10];
        dfs(n, 1);
        return ans[2];
    }

    private void dfs(int n, int num) {
        int x = n % 10;
        n /= 10;
        for (int i = 0; i <= x; i++)
            ans[i] += num;
        for (int i = 0; i < 10; i++)
            ans[i] += num * n;
        ans[0] -= num;
        int tmp = n;
        while (tmp > 0) {
            ans[tmp % 10] += (x + 1) * num;
            tmp /= 10;
        }
        if (n > 0)
            dfs(n - 1, num * 10);
    }
}

 

最后

以上就是轻松小兔子为你收集整理的JAVA程序设计:2出现的次数(面试题 17.06)的全部内容,希望文章能够帮你解决JAVA程序设计:2出现的次数(面试题 17.06)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部