357. Count Numbers with Unique Digits

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;  // 最高位數

        for (int index = 1; index < n; index++)  
            count = count*(9-index+1); // 9減去上個位數被選的一個數字再加上 0這個數字

上面這段就是:

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個選擇



你可能感兴趣的:(leecode,backtracking)