Given an integer n, return the count of all numbers with unique digits, x, where 0 <= x < 10n.
Example 1:
**Input:** n = 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
Example 2:
**Input:** n = 0
**Output:** 1
Constraints:
0 <= n <= 8
ac1: brute force
classSolution {int res;int[] used;publicintcountNumbersWithUniqueDigits(int n) {// edge casesif (n ==0) return1; res =0; used =newint[10];helper(n,0,true);return res; }privatevoidhelper(int remain,int curr,boolean canRepeatZero) {// exit, no more digits, returnif (remain ==0) { res++;return; }for (int i =0; i <=9; i++) {if (used[i] >0&& (i !=0||!canRepeatZero)) continue; used[i]++;boolean tmp =!canRepeatZero ?false: curr ==0|| i !=0;helper(remain-1, curr*10+i, tmp); used[i]--; } }}
ac: trick
classSolution {publicintcountNumbersWithUniqueDigits(int n) {if (n ==0) return1;int res =10; // when n == 1int nRes =9;int nextDigit =9;while (n >1&& nextDigit >0) { nRes = nRes * nextDigit; res += nRes; n--; nextDigit--; }return res; }}