题目:给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10^n 。
链接 https://leetcode.cn/problems/count-numbers-with-unique-digits/
class Solution:
def countNumbersWithUniqueDigits(self, n: int) -> int:
ans = [1,10,91,91+9*9*8,91+9*9*8+9*9*8*7,91+9*9*8+9*9*8*7+9*9*8*7*6,
91+9*9*8+9*9*8*7+9*9*8*7*6+9*9*8*7*6*5,
91+9*9*8+9*9*8*7+9*9*8*7*6+9*9*8*7*6*5+9*9*8*7*6*5*4,
91+9*9*8+9*9*8*7+9*9*8*7*6+9*9*8*7*6*5+9*9*8*7*6*5*4+9*9*8*7*6*5*4*3]
return ans[n]
class Solution:
def countNumbersWithUniqueDigits(self, n: int) -> int:
if n == 0:
return 1
if n == 1:
return 10
res, cur = 10, 9
for i in range(n - 1):
cur *= 9 - i
res += cur
return res
时间复杂度:O(n)。仅使用一个循环。
空间复杂度:O(1)。仅使用常数空间。
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/count-numbers-with-unique-digits/solution/tong-ji-ge-wei-shu-zi-du-bu-tong-de-shu-iqbfn/
class Solution:
def countNumbersWithUniqueDigits(self, n: int) -> int:
if n == 0:
return 1
dp = [1,10]
i = 2
while i <= n:
dp.append(dp[-1] + (dp[-1]-dp[-2]) * (10-i+1))
i += 1
return dp[-1]