美文网首页
47. 全排列 II

47. 全排列 II

作者: justonemoretry | 来源:发表于2021-08-09 22:19 被阅读0次
    image.png

    解法

    class Solution {
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> output = new ArrayList<>();
        public List<List<Integer>> permuteUnique(int[] nums) {
            boolean[] used = new boolean[nums.length];
            // 排序用于剪枝
            Arrays.sort(nums);
            dfs(nums, used);
            return res;        
        }
    
        private void dfs(int[] nums, boolean[] used) {
            // output长度等于nums长度时,直接放入结果中
            if (output.size() == nums.length) {
                res.add(new ArrayList<>(output));
                return;
            }
            for (int i = 0; i < nums.length; i++) {
                // used[i - 1]为false代表本层已经使用过了
                if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                    continue;
                }
                if (used[i] == false) {
                    used[i] = true;
                    output.add(nums[i]);
                    dfs(nums, used);
                    output.remove(output.size() - 1);
                    used[i] = false;       
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:47. 全排列 II

          本文链接:https://www.haomeiwen.com/subject/mtstbltx.html