1. 程式人生 > 其它 >刷題-力扣-357. 統計各位數字都不同的數字個數

刷題-力扣-357. 統計各位數字都不同的數字個數

題目連結

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/count-numbers-with-unique-digits
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題目描述

給你一個整數 n ,統計並返回各位數字都不同的數字 x 的個數,其中 0 <= x < 10n 。

示例 1:

輸入:n = 2
輸出:91
解釋:答案應為除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 範圍內的所有數字。 

示例 2:

輸入:n = 0
輸出:1

提示:

  • 0 <= n <= 8

題目分析

  1. 根據題目描述,計算0到10的n次冪中有多少數字,這些數字的每一位都不同
  2. 利用統計排列組合的思路解題,一共有0-9十位數
  3. 假設x是n位數,x的第一位數可能是1-9中的一位,九種可能;第二位數可能是0-9,排除第一位數,九種可能;第三位數有八種可能;以此類推
  4. 0到10的n次冪中就有,一位數的情況+兩位數的情況+···+n位數的情況

程式碼

class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        if (n == 0) { return 1; }
        int res = 10;
        int now = 9;
        for (int i = 0; i < n - 1; ++i) {
            now *= 9 - i;
            res += now;
        }
        return res;
    }
};