题目:
思路:
规律如下:
f(0)=1
f(1)=10
f(2)=9*9+f(1)
f(3)=9*9*8+f(2)
f(4)=9*9*8*7+f(3)
f(5)=9*9*8*7*6+f(4)
f(6)=9*9*8*7*6*5+f(5)
f(7)=9*9*8*7*6*5*4+f(6)
f(8)=9*9*8*7*6*5*4*3+f(7)
f(9)=9*9*8*7*6*5*4*3*2+f(8)
f(10)=9*9*8*7*6*5*4*3*2*1+f(9)
大于10的情况全为0,因为就10个数字,肯定都会重复。
代码实现:
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if (n == 0){
return 1;
}
if (n > 10){
return 0;
}
int pre_uniq = 10;
int multi = 9;
int t = 9;
for (int i = 2; i <= n; ++i){
t *= multi;
pre_uniq += t;
--multi;
}
return pre_uniq;
}
};
参考:
https://leetcode.com/problems/count-numbers-with-unique-digits/discuss/83041/JAVA-DP-O(1)-solution.