LeetCode357. 計算各個位數不同的數字個數
阿新 • • 發佈:2018-11-20
題目
給定一個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 ≤ x < 10n 。
示例:
輸入: 2
輸出: 91
解釋: 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 區間內的所有數字。
分析
也就是個數學題了
n = 1 的時候 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 —> 10個
n = 2 的時候 0-9 + 10-99, 10-99 十位有9個數字可以取,個位上有10個數字可以取但是因為不可以重複,所以十位取9個個位取10-1個 也就是 9×9 = 81個 最後總結果為 81 + 10 = 91 個
n = 3 的時候 0-99 + 100-999 ,0-99在上面已經求過,100-999三位數字,百位可以取9個數字,十位可以取10-1=9位數字,個位可以取10-2=8位數字, 結果則為 : 91 + 9×9×8 = 739個
……
num[n] = num[n-1] + 9×9!/(10-n)!
程式碼
class Solution {
public int countNumbersWithUniqueDigits(int n) {
if (n == 0) return 1;
int temp = 9;
int result = 10;
for (int i = 2; i <= n ; i++) {
temp = temp * (10 - i + 1);
result = temp + result;
}
return result;
}
}