美文网首页
2022-04-11 「357. 统计各位数字都不同的数字个数」

2022-04-11 「357. 统计各位数字都不同的数字个数」

作者: 柠香萌萌鸡 | 来源:发表于2022-04-11 09:14 被阅读0次

    今日中等题:https://leetcode-cn.com/problems/count-numbers-with-unique-digits/

    一开始思路偏了,看到数字基数比较大,默认想从数量少的开始,就是先统计有重复位数的数字,后来发现这种方式,很容易有重复,而且一旦n的数量增加,会变得非常复杂。

    所以换了个思维,直接统计不重复的数,会发现出了特殊的边缘值需要单独返回,100及以上的数的计算方式已经固定了:

    1. 首位不能为0,因此只有9种选择;
    2. 第二位开始可以选择的数字个数逐层减1;
    3. 因为0 <= n <= 8,所以不需要考虑没有数字可选的情况。

    综上,看下代码吧,今天的思路和题解基本一致:

    class Solution {
        public int countNumbersWithUniqueDigits(int n) {
            if (n==0) {return 1;}
            if (n==1) {return 10;}
            int ans = 10;
            int cur = 9;
            // 每增加1位数,可选数字范围比之前少1
            for (int i = 2; i <= n; i++) {
                cur = cur * (10-i+1);
                ans +=cur;
            }
            return ans;
        }
    }
    

    相关文章

      网友评论

          本文标题:2022-04-11 「357. 统计各位数字都不同的数字个数」

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