Leetcode357: Count Numbers with Unique Digits
2016-09-23 21:44
483 查看
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
题意:
给一个数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
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n==0) return 1;
if(n>10) return countNumbersWithUniqueDigits(10);
int res=9;
for(int i=1;i<n;i++){
res=res*(10-i);
}
return res+countNumbersWithUniqueDigits(n-1);
}
};
复杂度:
T(n)=n-1+T(n-1),依据主项定理,所以时间复杂度是O(nlogn)。
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
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n==0) return 1;
if(n>10) return countNumbersWithUniqueDigits(10);
int res=9;
for(int i=1;i<n;i++){
res=res*(10-i);
}
return res+countNumbersWithUniqueDigits(n-1);
}
};
复杂度:
T(n)=n-1+T(n-1),依据主项定理,所以时间复杂度是O(nlogn)。
相关文章推荐
- LeetCode 357: Count Numbers with Unique Digits
- LeetCode[357] Count Numbers with Unique Digits
- leetcode_357 Count Numbers with Unique Digits
- leetcode357: Count Numbers with Unique Digits
- Leetcode 357 Count Numbers with Unique Digits
- [leetcode-357]Count Numbers with Unique Digits(java)
- Java [Leetcode 357]Count Numbers with Unique Digits
- LeetCode - 357 - Count Numbers with Unique Digits
- LeetCode 357 Count Numbers with Unique Digits
- leetcode:数学:Count Numbers with Unique Digits(357)
- 【LEETCODE】357- Count Numbers with Unique Digits [Python]
- leetcode 357 Count Numbers with Unique Digits C++
- leetcode 357 c++. Count Numbers with Unique Digits
- LeetCode 357 Count Numbers with Unique Digits (排列组合)
- LeetCode 357 Count Numbers with Unique Digits
- Leetcode-357- Count Numbers with Unique Digits C#
- [LeetCode] Count Numbers with Unique Digits 计算各位数值不同的数的个数
- 357.leetcode Count Numbers with Unique Digits(easy)[数学问题 非重复数字]
- Math-357-Count Numbers with Unique Digits
- [Leetcode]Count Numbers with Unique Digits