1. 程式人生 > >LeetCode357. 計算各個位數不同的數字個數

LeetCode357. 計算各個位數不同的數字個數

題目

給定一個非負整數 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; } }