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;
}
};