Numbers With Repeated Digits
2020-01-03 12:01:46
问题描述:

问题求解:
确实可以当作数学题去做,但是要分类讨论什么的还是有点麻烦的。
这个时候万能的dfs上场了,直接暴力检索,真的太强了。
int res = 0;
public int numDupDigitsAtMostN(int N) {
dfs(0, 0, N);
return N - res + 1;
}
private void dfs(long curr, int used, int N) {
if (curr > N) return;
res += 1;
for (int i = 0; i < 10; i++) {
if (i == 0 && used == 0) continue;
if ((used & (1 << i)) > 0) continue;
dfs(curr * 10 + i, used | (1 << i), N);
}
}

浙公网安备 33010602011771号