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=3,那麼我就把 只有一個Digit的結果+只有兩個Digits的結果 + 只有三個Digits的結果 用遞迴方式實作
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n == 0) return 1; // 0
if(n == 1) return 10; // 0,1,2,3,4,5,6,7,8,9
int count = 9; // 最高位數
for (int index = 1; index < n; index++)
count = count*(9-index+1); // 9減去上個位數被選的一個數字再加上 0這個數字
return count + countNumbersWithUniqueDigits(n-1);
}
};
int count = 9; <span style="font-family: Arial, Helvetica, sans-serif;">// 最高位數</span>
for (int index = 1; index < n; index++)
count = count*(9-index+1); <span style="font-family: Arial, Helvetica, sans-serif;">// 9減去上個位數被選的一個數字再加上 0這個數字</span>
上面這段就是:
n = 2 時(就是數字 XX 的時候),十位數有9個選擇(1,2,3,4,5,6,7,8,9),個位數字只剩9(1,2,3,4,5,6,7,9,0)個選擇(假設十位數選了 8)
n= 3 時(就是數字 XX X的時候),百位數有9個選擇(1,2,3,4,5,6,7,8,9),十位數有9個選擇(1,2,3,4,5,6,7,9,0) ,個位數字只剩8個選擇