给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10的n次方。
示例:
输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
代码:
public int countNumbersWithUniqueDigits(int n)
{
if(n==0)
return 1;
if(n==1)
return 10;
int []dp=new int[n+1];
dp[0]=0;
dp[1]=0;
for(int i=2;i<=n;i++)
{
dp[i]=(int) (dp[i-1]*10+(9*Math.pow(10,i-2)-dp[i-1])*(i-1));
}
int sum=0;
for(int j=0;j<=n;j++)
{
sum=sum+dp[j];
}
return (int) (Math.pow(10, n)-sum);
}