BiruLyu
7/8/2017 - 6:04 PM

357. Count Numbers with Unique Digits(1st).java

public class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        int[] dp = new int[11];
        String choices = "9987654321";
        dp[0] = 1;
        dp[1] = 10;
        for (int i = 2; i <= 10; i++) {
            int val = 1;
            for (int j = 0; j < i; j++) {
                val *= choices.charAt(j) - '0';
            }
            dp[i] = val + dp[i - 1];
        }
        return n > 10 ? dp[10] : dp[n];
    }
}
public int countNumbersWithUniqueDigits(int n) {
        if (n == 0)     return 1;
        
        int res = 10;
        int uniqueDigits = 9;
        int availableNumber = 9;
        while (n-- > 1 && availableNumber > 0) {
            uniqueDigits = uniqueDigits * availableNumber;
            res += uniqueDigits;
            availableNumber--;
        }
        return res;
    }