357. 计算各个位数不同的数字个数

357. 计算各个位数不同的数字个数

有点像规律题

n = 1,有0~9这10个数字

n = 2,两位数有10*9-9=81个可能,再加上一位数的10个数,答案是91

n = 3,三位数有81*8个可能,再加上一位数和两位数

所以dp[i],就是i位数有几种可能,最后求和即可。

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

你可能感兴趣的:(DP,LeetCode,leetcode,动态规划,数据结构,算法)