357. Count Numbers with Unique Digits
- Total Accepted: 19808
- Total Submissions: 44589
- Difficulty: Medium
- Contributors: Admin
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.
Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99]
)
解题思路:
本题即为一道简单的组合数学题。显然n>=10时的取值与n=10时的取值相同。因为11位数必然有相同的数字。
注意到n=0时,结果为1。n=1时结果为10=1+9(数字为0~9)。n=2时结果为91=10+9*9;n=3时结果为91+9*9*8。n=4时结果为(91+9*9*8)+(9*9*8*7).
其余情况依次类推。
代码展示:
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
vector<int> res;
res.push_back(10);
if(n==0) return 1;
if(n==1) return 10;
if(n>10) n=10;
int fac =9;
for(int i=1;i<n;i++)
{
fac = fac*(10-i);
res.push_back(res[i-1]+fac);
}
return res[n-1];
}
};