LeetCode 357. Count Numbers with Unique Digits

問題

給定一個非負整數n,計算所有唯一數字x,其中0≤x < 10n10^n

輸入: 2
輸出: 91 
解釋: 最後的結果應該是在 0 ≤ x < 100範圍內數字的總數, 除去11,22,33,44,55,66,77,88,99,因爲它們包含了相同的數字。

解析

這個問題其實是一個數學問題,要想求得[0,10n)[0,10^n)內包含不同數字字符的數的個數,先歸納:當n=1時,可以選0~9所有數字;當n=2時,先選定十位數數字,有9種選法(0不能做最高位數),再選定個位數,有9種選法,那麼最後的結果是f(1)+9*9;依次類推,可以得到規律:f(n)=f(n1)+99...(9n+2)f(n)=f(n-1)+9*9*...*(9-n+2).

Java代碼

    public int countNumbersWithUniqueDigits(int n) {
        if(n==0) return 1;
        if(n==1) return 10;
        if(n>10) return countNumbersWithUniqueDigits(10);
        int ans=9;
        for(int i=2;i<=n;i++){
            ans*=9-i+2;
        }
        return countNumbersWithUniqueDigits(n-1)+ans;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章