357. Count Numbers with Unique Digits
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<10^n的各个位上面的数字互不相同的x一共有多少个。
解答:
分析易知,该题有这样的递推关系(简记函数为f):f(n)=f(n-1)+n位满足题意的数。
依据组合数学的知识可以知道,对于n位数,每个位上的数字都不相同的数的个数=9*9*8*7*……(n个数相乘)。
同时考虑到,n=0的时候,只有数字0,即f(0)=1,当n大于10的时候,不可能存在位数大于10还满足题意的数,所以按n=10处理。
代码:
[cpp]
view plain
复杂度:
T(n)=n-1+T(n-1),依据主项定理,所以时间复杂度是O(nlogn)。