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

2021-09-19 17:21:40 字數 980 閱讀 9799

題目:

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

1. 首先想到的是暴力版本:從0開始遍歷到 10^n,判斷每個數字的每一位是否被重複,沒有則計數+1; 顯然這種方法遇到大量資料時,會超時。時間複雜度 o(10^n);

/**

* @param n

* @return

*/var countnumberswithuniquedigits = function(n) n

* @return

*/var countnumberswithuniquedigits = function(n) );

}backtrack("",[0,1,2,3,4,5,6,7,8,9]);

return count;

};

據說還有一種演算法:dynamic programming

1. 階段劃分:1 位數,2位數,  一直到n位數,逐漸增加位數。

2. 每個階段的狀態:i 位不重複的數字組合可能性為:9*(10-(i-1))*(10-(i-2))*(10-(i-3)) *(10-(i-(i-1))); 假設 dp[i] 表示 i 位數的組合, dp[i-1] 表示i-1 位數的組合。 那所有可能的組合就是:dp[i] = 9*(10-(i-1))*(10-(i-2))*(10-(i-3)) *(10-(i-(i-1))) + dp[i-1] 

3. 初始狀態:dp[0] =1, dp[1] = 10, dp[2] = 9 *9 + 10=91;

/**

* @param n

* @return

*/var countnumberswithuniquedigits = function(n)

result += cur;

}return result;

};

101 計算各個位數不同的數字個數

題目描述 給定乙個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 x 10n 示例 輸入 2 輸出 91 解釋 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 0,100 區間內的所有數字。思路 一開始傻乎乎的打算使用遞迴來計算每個位數的個數,當然肯定超時啦...

357 計算各個位數不同的數字個數

給定乙個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 x 10n 示例 輸入 2 輸出 91 解釋 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 0,100 區間內的所有數字。import j a.util.scanner class solution ...

T357 計算各個位數不同的數字個數

思想 找規律,每位上的數有10種選擇 0,9 而如何要求每位上的數字不同則必須保證n最大為10,因為只要n 10也就是11位所表示的數各位上的數一定有重複。f 0 1 f 1 10 f 2 9 9 f 1 而對於n n 10 位數,能組成的各位數字都不同的數字的個數f n 9 第一位也就是最高位不能...