Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.
Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99]
)
Hint:
Credits:
Special thanks to @memoryless for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
思路:
n=0 f(0) = 2(0,1)
n=1 f(1) = 10(0,1,2,3,4,5,6,7,8,9)
n=2 f(2) = 10 + 9 * 9 = f(1) + 9*9
n=3 f(3) = 10 + 9 * 9 + 9 * 9 * 8 = f(2) + 9*9*8
n=4 f(4) = 10 + 9 * 9 + 9 * 9 * 8 + 9 * 9 * 8 * 7 = f(3) + 9*9*8*7
... ...
n=10 f(10)= 10 + 9*9 + ... + 9*9*8*7*6*5*4*3*2*1 = f(9) + 9*9*8*7*6*5*4*3*2*1
... ...
n>10 f(n) = f(10)
java code:
/*
n=0 f(0) = 2(0,1)
n=1 f(1) = 10
n=2 f(2) = 10 + 9 * 9
n=3 f(3) = 10 + 9 * 9 + 9 * 9 * 8
n=4 f(4) = 10 + 9 * 9 + 9 * 9 * 8 + 9 * 9 * 8 * 7
...
n=10 f(10)= f(9) + 9*(9!)
...
f(n) = f(10), when n>10
*/
public class Solution {
public int countNumbersWithUniqueDigits(int n) {
if(n==0) return 1;
if(n==1) return 10;
n = Math.min(10, n);
int ans = 10;
int base = 9;
for(int i = 1; i < n; i++) {
base *= 10-i;
ans += base;
}
return ans;
}
}