Leetcode 47 全排列II

题目

给定一个可包含重复数字的序列 nums按任意顺序 返回所有不重复的全排列。

解题思路

  递归+回溯的标准思想,用一个标记数组开表示哪些元素拿过,用 HashSet 存一下结果就行了。

代码

class Solution {
    public int length;
    public boolean[] flag;

    public List<List<Integer>> permuteUnique(int[] nums) {
        length = nums.length;
        flag = new boolean[length];
        Set<List<Integer>> ans = new HashSet<>();

        dfs(ans, nums, new ArrayList<>());

        return new ArrayList<>(ans);
    }

    public void dfs(Set<List<Integer>> ans, int[] nums, List<Integer> now) {
        if (now.size() == length) {
            ans.add(new ArrayList<>(now));
            return;
        }
        for (int i = 0; i < length; i++) {
            if (flag[i]) continue;
            flag[i] = true;
            now.add(nums[i]);
            dfs(ans, nums, now);
            now.remove(now.size() - 1);
            flag[i] = false;
        }
    }
}
上一篇:Win11 Subsystem for Android(Win11安卓子系统)


下一篇:win11错误代码0xc1900101怎么解决 windows11错误代码0xc1900101的解决方法