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

  

猜你喜欢

转载自www.cnblogs.com/hyserendipity/p/12144263.html