给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10^n 。
示例:
输入: 2 输出: 91 解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
思路:对于一个数字不重复的话,有10种选择(0-9);
对于两位数不重复的话,可以有9×9种选择,因为0不能在首位;
对于三位数不重复的话,可以有9×9×8种选择,因为0不能在首位;
……
对于n位数不重复的话,可以有9×9×8×……×(11 - n )种选择,因为0不能在首位;
对于n>10,不存在不重复的数。
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n==0) return 1;
int re=10, temp=9;
for(int i=2; i<=n; ++i){
temp*=11-i;
re+=temp;
}
return re;
}
};