1. 程式人生 > >【LeetCode】357 計算各個位數不同的數字個數 (C++)

【LeetCode】357 計算各個位數不同的數字個數 (C++)

題目描述:

給定一個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 ≤ x < 10n 。

示例:

輸入: 2 輸出: 91 解釋: 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 區間內的所有數字。

解題方案:

開始一直想著動態規劃的狀態轉移方程,結果想得太複雜了,實際上用排列組合還是很簡單的...【自閉了

然後我考慮的n>10的情況,答案沒有,可能預設不計算那種吧,不過寫上還是應該沒什麼問題的...

當n>=2時,第一位有9種可能,第二位9種,第三位8種...以此類推

程式碼:

class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        if(n==0) 
            return 1; 
        if(n==1) 
            return 10; 
        int result=10; 
        int f=9; 
        for (int i = 2; i <= n; ++i) 
        { //從f(2)開始計算,然後累加即可 
            f*=(10-i+1); 
            result += f; 
        } 
        return result;

    }
};