题目:
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]
)
题意:
给定数字n,统计0 ≤ x < 10n中不含重复数字的数的个数。
代码:
class Solution(object):
def countNumbersWithUniqueDigits(self, n):
"""
:type n: int
:rtype: int
"""
if n < 1 :
return 1
else :
res = 10 #初始化返回的结果,如果n=1,则res=10
i = 1
k = 9 #用于循环中,如果n>=2,则进入循环,此时,高位数字只能为1-9,有9中可能,k=9。然后运行排列的思想,第二位可以有9种数字(包含0,一共10位,除去第一位已选的,剩下9位),第三位可以有8种数字,……
while i < n and i < 10 :
res += k*(10-i) #累加排列结果
k = k*(10-i) #更新排列的形状,用于后面相乘
i += 1
return res
笔记:
运用排列组合的思想。自己动画划一下更清楚。