中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • leetCode 357. Count Numbers with Unique Digits | Dynamic Programming | Medium

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

發布時間:2020-08-06 09:15:09 來源:網絡 閱讀:489 作者:313119992 欄目:開發技術

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次方內,沒有重復數字的數的個數。例如10的3次方內,102為合法值,101為非法值。

思路:

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

n次方范圍合法個數
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

經過上面分析,當n大于等于10的時候,合法值不再增加,因為n>=10時,數的位數超過了10位,所以肯定有重復的數字。


代碼如下:

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問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郯城县| 文登市| 昭通市| 岢岚县| 晋州市| 贡嘎县| 阿鲁科尔沁旗| 乌什县| 泸定县| 新泰市| 高陵县| 砀山县| 区。| 综艺| 高密市| 海晏县| 阳信县| 武鸣县| 天门市| 玉溪市| 浪卡子县| 香格里拉县| 恭城| 札达县| 合川市| 湛江市| 武平县| 辉南县| 宁陕县| 英山县| 临汾市| 江川县| 桐城市| 绥德县| 翼城县| 乳山市| 潼关县| 台南县| 内乡县| 开平市| 清镇市|