给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。
示例:
输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析
排列组合的基础题
代码分析
class Solution {
int jiecheng(int num){
int sum = 9;
int value = 9;
for(int i = 2;i <= num && value > 0;++i){
sum *= value;
--value;
}
return sum;
}
public:
int countNumbersWithUniqueDigits(int n) {
if(n == 0)
return 1;
else if(n == 1)
return 10;
vector<int> dp(n + 1,0);
dp[0] = 1;
dp[1] = 10;
for(int i = 2;i <= n;++i){
dp[i] = jiecheng(i) + dp[i - 1];
}
return dp[n];
}
};