题: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];
}
}