[LeetCode] 357. Count Numbers with Unique Digits

题:https://leetcode.com/problems/count-numbers-with-unique-digits/

题目大意

给定n,找出 0 ≤ x < 10n 中没有重复数字的个数。

思路

对于 n ==1;0,2,3,4,5,6,7,8,9 。10个。
对于 n ==2;考虑2位数中 没有重复的数。第一位可以选 9种(1,2,…,9),第二位置可选(0,1,2,3 …,9) 中 与第一位不同的数,从10种中选9种。 在加上n ==1 的种类。

状态:
dp[i] , n== i 时,没有重复的个数。

dp[i] = dp[i-1] + i位数没有重复的个数。

class Solution {
     
    public int countNumbersWithUniqueDigits(int n) {
     
        if(n == 0)
            return 1;
        int[] dp = new int[n+1];
        dp[1] = 10;
        int cnt = 9;
        for(int i =2 ; i <= n ; i++){
     
            cnt=cnt*(11-i);
            dp[i] = cnt +  dp[i-1];
        }
        return dp[n];
    }
}

你可能感兴趣的:(LeetCode)