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