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; } }