有点像规律题
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;
}
}