给定一个常数n,求满足0<=x<10^n,且不包含相同数字的x的个数。例如给定n = 2,则 0<=x<100,且x不能为以下数字:11,22,33... 99,因此x的个数为91。
分析:当n=0时,只有一个值0
当n=1时,除0外,x可以是1,2..9中的任意一个,个数为9。
当n=2时,除了一位的数字,两位的数字可以如下方式组成:第一位从1..9中选一个(最高位不能为0),第二位从剩下的9个数字中选一个。因此,两位数的个数有9*9。
当n=3时,除了一位和两位的数字,三位的数字可以以如下方式组成:第一位从1...9中选一个,第二位从剩下的9个中选一个,第三位从剩下的8位中选一个。因此,三位数的个数为 9 * 9 * 8
。。。
当n=k时,k位的数字个数为9*9*8*7...
public int countNumbersWithUniqueDigits(int n) { int[] array = new int[]{9,9,8,7,6,5,4,3,2,1}; int total = 0; int carry = 1; for (int i = 0; i <= n; i++) { total += carry; //位数分别为0、1、2...n的数字个数相加 if (i < array.length) { carry *= array[i]; } else { //如果大于10,将不存在数字不同个的数字 break; } } return total; } }