357. 统计各位数字都不同的数字个数https://leetcode.cn/problems/count-numbers-with-unique-digits/
当 n = 0 时, , 只有这一种选择,
当 n = 1 时, , 有 种选择
当 n=2 时, 的选择可以由两部分构成:只有一位数的 和有两位数的 。只有一位数的 可以由上述的边界情况计算。有两位数的 可以由组合数学进行计算:第一位的选择有 9 种,即 1∼9,第二位的选择也有 9 种,即 0∼9 中除去第一位的选择。
更一般地,含有 位数的各位数字都不同的数字 的个数,
可以由公式 再加上含有小于 位数的各位数字都不同的数字 的个数,
即可得到答案。
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if (n == 0) {
return 1;
}
if (n == 1) {
return 10;
}
int ans = 10, cur = 9;
for (int i = 0; i < n - 1; ++i) {
cur *= 9 - i;
ans += cur;
}
return ans;
}
};