LeetCode 357 Count Numbers with Unique Digits

题意:

给定一个非负数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;    
    }
}

 

原文地址:https://www.cnblogs.com/mycd/p/5742683.html