題目
給你一個整數 n ,統計并傳回各位數字都不同的數字 x 的個數,其中 0 <= x < 10^n。
提示:0 <= n <= 8
示例1:
輸入:n = 2
示例2:
輸入:n = 0
解題思路
當 n=0,數字有{0} 1個。
當 n=1,數字有 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 10個。
從 n=1 的數字清單 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 中随便取出一個除0以外的數字,因為0不能作為起始數字!,,我們取2好了。通過在2的尾巴處拼接一位數字可以得到新的合法數字有:
{20, 21,23,24,25,26,27,28,29},
可以看到,除了不能在尾巴處拼接一個2,兩個連續的2就不滿足要求了,0-9種一共有9個數字可以拿來拼接在尾巴處。新增答案為9個。同理,對于n=1數字清單{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}中的其他任意非0數也可以進行拼接操作,一共可以新增9*9個答案。
最終,n=2的合法數字,n=1時的答案 + 長度為2的數字個數(9*9個)= 10 + 81 = 91。
n=3時同理,隻不過此時可以用拼接的數字減少為了8個,此時答案為10 + 9 * 9 + 9 * 9 * 8 = 739。
代碼實作
class Solution {
public int countNumbersWithUniqueDigits(int {
if(n == 0)
{
return 1;
}
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 10;
for(int i = 2; i <= n; i++)
{
dp[i] = dp[i-1] + (dp[i-1] - dp[i-2])*(10-(i-1));
}
return