美文网首页leetcode算法
357. 统计各位数字都不同的数字个数

357. 统计各位数字都不同的数字个数

作者: 刘翊扬 | 来源:发表于2022-04-11 22:04 被阅读0次

    357. 统计各位数字都不同的数字个数 - 力扣(LeetCode) (leetcode-cn.com)

    给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。

    示例 1:

    输入:n = 2
    输出:91
    解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。

    示例 2:

    输入:n = 0
    输出:1

    思路

    这个题就是高中时学的排列组合
    f(0)=1
    f(1)=10
    f(2)=9 * 9 + f(1)
    f(3)=9 * 9 * 8 + f(2)
    f(4)=9 * 9 * 8 * 7 + f(3)
    左边开始数
    首位数不取 0 其他位数可以取 0,下一位比前一位取法少一种,因为不能重复
    首位数取 0 时就是 f(n-1)的数量

    方法一:排列组合

    class Solution {
        public int countNumbersWithUniqueDigits(int n) {
            if (n == 0) {
                return 1;
            }
            if (n == 1) {
                return 10;
            }
            int res = 10, cur = 9;
            for (int i = 0; i < n - 1; i++) {
                cur *= 9 - i;
                res += cur;
            }
            return res;
        }
    }
    

    方法二:面向测试用例

    class Solution {
        public int countNumbersWithUniqueDigits(int n) {
            int[] arr = {1, 10, 91, 739, 5275, 32491, 168571, 712891, 2345851};
            return arr[n];
        }
    }
    

    提示:

    • 0 <= n <= 8

    相关文章

      网友评论

        本文标题:357. 统计各位数字都不同的数字个数

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