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)。
本文探讨了一种算法问题,即给定一个非负整数n,如何找出所有位数小于10^n且各位数字互不相同的数。文章提供了一种递归解决方案,并详细解释了其背后的数学原理。

523

被折叠的 条评论
为什么被折叠?



