刷題-力扣-357. 統計各位數字都不同的數字個數
阿新 • • 發佈:2022-04-11
題目連結
來源:力扣(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
題目分析
- 根據題目描述,計算0到10的n次冪中有多少數字,這些數字的每一位都不同
- 利用統計排列組合的思路解題,一共有0-9十位數
- 假設x是n位數,x的第一位數可能是1-9中的一位,九種可能;第二位數可能是0-9,排除第一位數,九種可能;第三位數有八種可能;以此類推
- 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; } };