Count Numbers with Unique Digits(排列组合)

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

Example:

Input: 2
Output: 91 
Explanation: The answer should be the total numbers in the range of 0 ≤ x < 100, 
             excluding 11,22,33,44,55,66,77,88,99
/* 考虑k位情况
 * 第一位不能去0 有9中情况 第二位 不能取和第一位相同的 有9种
 * k>2 f(k)=9*9*8*(9+2-k)
 *
 * */
class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        if(n==0)    return 1;
        int ret=0;
        while(n>0){
            ret += f(n);
            n--;
        }
        return ret;
    }
    inline int f(int k){
        if(k==1)    return 10;
        int tmp=9;
        for(int i=11-k, j=k-1;j>0;i++, j--){
            tmp *= i;
        }
        return tmp;
    }
};

 

你可能感兴趣的:(leetcode)