您的位置:首页 > 产品设计 > UI/UE

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
[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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: