LeetCode刷题日记2022-4-11/357. 统计各位数字都不同的数字个数-排列组合

357. 统计各位数字都不同的数字个数

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

给你一个整数 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
0位数 有1个 dp[0]
1位数 有10个 dp[1]
2位数 有99+dp[1]
3位数 有9
9*8+dp[2]

以此类推

题解代码

class Solution:
    def countNumbersWithUniqueDigits(self, n: int) -> int:
        dp=[0]*(n+1)
        dp[0]=1
        for i in range(1,len(dp)):
            temp,m=i,9

            while temp>1:
                temp-=1
                m*=10-temp
            dp[i]=m+dp[i-1]
        return dp[n]

你可能感兴趣的:(Leetcode每日一题,leetcode,算法,python)