Leetcode 357. Count Numbers with Unique Digits

原题链接:

思路: 这就是一道数学的排列组合问题,找出各位不同的数,1位数都不同,对于n>1的情况,从左到右第1位有9种选择,其他位依次有8,7,6…1,大于10位的数肯定有重复的数字出现(计算n = 10即可),n(n>1)位数有 9 * (9!/ (10 - n)!) 个值,讲n从0累加到n就是所求结果,详情见代码

class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        if(n <= 0) return 1;
        if(n > 10){
            n = 10;
        }
        int var = 9, fact = 9, sum = 0;
        for(int i = 1; i < n; i++){
            var *= fact--;
            sum += var;
        }
        return sum + 10;
    }
}

你可能感兴趣的:(leetcode)