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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的思路1:(暴力)
1、最直接的就是暴力解,但是超时。到7的时候就超时了
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
int len =pow(10,n);
int count = 0;
for(int i = 0; i < len; i++){
if(check(i) == false) count++;
}
return len - count;
}
bool check(int n){ //如果有重复,返回false
vector<bool> vis(10, false);
if(n == 0) return true;
while(n != 0){
int yushu = n % 10;
if(vis[yushu] == false){
vis[yushu] = true;
}else return false;
n /= 10;
}
return true;
}
};
参考思路2:(dp)
1、dp[i]表示i位数字不同的数字数
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n == 0) return 1;
int dp[11];
dp[0] = 1;
int per = 1;
for(int i = 1; i <= 10; i++){
dp[i] = dp[i-1] + 9*per;
per = per * (10-i);
}
if(n <= 10) return dp[n];
else return dp[10];
}
};