2
public int numDupDigitsAtMostN(int n) {7
List<Integer> list = new ArrayList<>();12
for (int i = 1; i < list.size(); i++) {13
ans += 9 * find(i - 1, 9);15
boolean[] seen = new boolean[10];16
for (int i = list.size(), d = 9; i > 0; --i, d--) {17
int count = i == list.size() ? list.get(i - 1) - 1 : list.get(i - 1);18
for (int j = 0; j < list.get(i - 1); j++) {23
ans += count * find(i - 1, d);24
if (seen[list.get(i - 1)]) {27
seen[list.get(i - 1)] = true;32
private int find(int n, int d) {34
// d!/(d-n)/(d-n).../136
for (int i = 1; i <= d; i++) {39
for (int i = n + 1; i <= d; i++) {