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];
}
};
本文介绍了一种通过组合数学的方法来解决计数特定范围内具有唯一数字的问题。对于给定的非负整数n,该算法能高效地计算出所有包含不同数字的数的数量,范围从0到10^n。
2588

被折叠的 条评论
为什么被折叠?



