357. Count Numbers with Unique Digits

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])

解法1:

一个排列组合的题目,注意一位的数有10种选择,而大于一位的数第一位只有9种。
用一个数组或者一个变量prev记录之前的结果简化运算。
C++

1

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Solution {
public int countNumbersWithUniqueDigits(int n) {
if (n == 0) {
return 1;
}
if (n == 1) {
return 10;
}
int sum = 0;
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 10;
dp[2] = 81;
sum += dp[1] + dp[2];
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] * (9 - i + 2);
sum += dp[i];
}
return sum;
}
}