首页 > 其他 > 详细

LeetCode 357 Count Numbers with Unique Digits

时间:2016-08-05 21:28:15      阅读:171      评论:0      收藏:0      [点我收藏+]

题意:

给定一个非负数n,要求算出所有符合条件的x。要求 0 ≤ x < 10^n,并且x的各位都不相同。

题解:

当n=0时,0<=x<1,因此只有x=0一种情况。

当n=1时,0<=x<10,即0-9共10种情况。

当n>=2时,最高位为1-9共9种情况,第二位不能与上一位相同但可以为0,因此也是9种情况,下一位是8种情况以此类推。

应此结果是f(1)+f(2)+f(3)+....+f(n)

而f(k) = 9 * 9 * 8 * ... (9 - k + 2)  (k>=2)

代码:

public class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        if(0 == n)
            return 1;
        if(1 == n)
            return 10;
        int sum = 10;
        for(int i=2; i<=n; i++)
            sum+=getMul(i);
        return sum;
    }
  //计算f(k)
    public int getMul(int n){
        int result = 1;
        for(int i=9-n+2; i<=9; i++)
            result*=i;
        return result*9;    
    }
}

 

 

LeetCode 357 Count Numbers with Unique Digits

原文:http://www.cnblogs.com/mycd/p/5742683.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!