題目:
思路:
規律如下:
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.