思路:
f(0)=1
f(1) = 10
f(2) = 9*9
f(3) = 9*9*8
f(4) = 9*9*8*7
f(n) = 9*9*8...(9-k+2)
如果为0位,那么返回1 ,如果为1位,那么可选的数字为0-9,有10种情况,返回10即可,如果n>1,那么由于第一位不能为0,那么第一位开始有9种选择,第二位有9种选择。
第一种:
public class Solution {
public int countNumbersWithUniqueDigits(int n) {
if(n==0) return 1;
if(n==1) return 10;
int ans =10;
int base = 9;
//int result=0;
for(int i=1;i<n;i++){
base = base*(10-i);
ans = ans+base;
}
return ans;
}
}
第二种:
public class Solution {
public int countNumbersWithUniqueDigits(int n) {
/*
f(0)=1
f(1) = 10
f(2) = 9*9
f(3) = 9*9*8
f(4) = 9*9*8*7
.
.
f(n) = 9*9*8...(9-k+2)
*/
int [] dp =new int[n+1];
dp[0]=1;
//dp[1]=10;
for(int i=1;i<=n;i++){
dp[i] = 9;
}
for(int i=2;i<=n;i++){
for(int j=9;j>=9-i+2;j--){
dp[i]=dp[i]*j;
}
}
int ans=0;
for(int i=0;i<=n;i++){
ans+=dp[i];
}
return ans;
}
}