溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

leetCode 357. Count Numbers with Unique Digits | Dynamic Programming | Medium

發(fā)布時間:2020-08-06 09:15:09 來源:網(wǎng)絡(luò) 閱讀:483 作者:313119992 欄目:開發(fā)技術(shù)

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])

Hint:

  1. A direct way is to use the backtracking approach.

  2. Backtracking should contains three states which are (the current number, number of steps to get that number and a bitmask which represent which number is marked as visited so far in the current number). Start with state (0,0,0) and count all valid number till we reach number of steps equals to 10n.

  3. This problem can also be solved using a dynamic programming approach and some knowledge of combinatorics.

  4. Let f(k) = count of numbers with unique digits with length equals k.

  5. f(1) = 10, ..., f(k) = 9 * 9 * 8 * ... (9 - k + 2) [The first factor is 9 because a number cannot start with 0].

題目大意:

找出10的n次方內(nèi),沒有重復(fù)數(shù)字的數(shù)的個數(shù)。例如10的3次方內(nèi),102為合法值,101為非法值。

思路:

采用排列組合來求出10的i次方,比如10的平方,范圍為[1,100),然后找出這個范圍內(nèi)合法值有幾個。9*9(第一位不能為0,所以為9,第二位可以為除了第一位以外的9中情況)。

n次方范圍合法個數(shù)
0[0,1)1
1[1,10)
9
2[10,100)9*9
3
[100,1000)9*9*8
.........
i(i<9)
[10的i-1次方,10的i次方)9*9*8*7*...*(9 - n + 2)
9
[100000000,1000000000)9*9*8*7*6*5*4*3*2

經(jīng)過上面分析,當(dāng)n大于等于10的時候,合法值不再增加,因?yàn)閚>=10時,數(shù)的位數(shù)超過了10位,所以肯定有重復(fù)的數(shù)字。


代碼如下:

class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        int result,tmp;
        if(0 == n)
            return 1;
        if(1 == n)
            return 10;
        result = 10;
        tmp = 9;
        for(int i = 2; i<=min(n,9); ++i)
        {
            result += tmp * (11 - i);
            tmp *= (11 - i);
        }
        
        return result;
    }
};


2016-09-01 18:45:28

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI