357. Count Numbers with Unique Digits
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.
Example:
Input: 2
Output: 91
Explanation: The answer should be the total numbers in the range of 0 ≤ x < 100,
excluding 11,22,33,44,55,66,77,88,99
Approach
- 这是一道很纯粹的数学题,需要用到排列组合的知识,直接看代码吧。
Code
class Solution {
public:
vector<int> cache;
int fact(int n) {
if (n>1&&cache[n]==0) {
cache[n] = fact(n - 1)*n;
}
return cache[n];
}
int C(int a, int b) {
return fact(a) / (fact(b)*fact(a - b));
}
int A(int a,int b) {
return fact(a) / fact(a - b);
}
int countNumbersWithUniqueDigits(int n) {
cache = vector<int>(10, 0);
cache[0] = 1;
cache[1] = 1;
int res = 0;
if (n >= 1)res += 9;
for (int i = 2; i <= n; i++) {
res += C(9, 1)*C(9, i - 1)*A(i - 1, i - 1);//第一位不能为零
}
return res;
}
};