美文网首页
leetcode题目47. 全排列 II(java)

leetcode题目47. 全排列 II(java)

作者: castlet | 来源:发表于2020-09-10 09:33 被阅读0次

题目描述

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例

输入: [1,1,2]
输出:
 [
   [1,1,2],
   [1,2,1],
   [2,1,1]
 ]

代码

public List<List<Integer>> permuteUnique(int[] nums) {
    if (nums == null || nums.length <= 0) {
        return null;
    }
    Arrays.sort(nums);// 排序(升序或者降序都可以),排序是剪枝的前提
    boolean[] used = new boolean[nums.length];
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> path = new LinkedList<>();
    backtrackII(nums, 0, used, path, result);
    return result;
}


public void backtrackII(int[] nums, int depth, boolean[] used, List<Integer> path, List<List<Integer>> result) {
    if (depth == nums.length) {
        // 所有数都填完了
        result.add(new ArrayList<Integer>(path));
        return;
    }
    // 注意,这里是从i = 0开始的
    for (int i = 0; i < nums.length; i++) {
        if(used[i]) {
            // 剪枝
            continue;
        }

        if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
            // 因题目要求不重复的全排列,所以如果当前的值和前一个值一样,则再次剪枝
            continue;
        }

        used[i] = true;
        path.add(nums[i]);
        backtrackII(nums, depth + 1, used, path, result);
        path.remove(path.size() - 1);
        // 撤销操作
        used[i] = false;
    }
}

相关文章

  • 47. 全排列 II

    47. 全排列 II[https://leetcode.cn/problems/permutations-ii/]...

  • 47. 全排列 II、39. 组合总和、40. 组合总和 II

    回溯的题 47. 全排列 II[https://leetcode-cn.com/problems/permutat...

  • leetcode题目47. 全排列 II(java)

    题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例 代码

  • 搜索(二)回溯

    一、题目总结 基础问题 46.全排列 77.组合 78.子集 39.组合求和 47.全排列 II(重复元素) 90...

  • LeetCode - 47. 全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2]输出:[[1,1,2],[1...

  • [LeetCode][M] 47. 全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2]输出:[[1,1,2],[1...

  • YC-常考的题目

    46. 全排列 47. 全排列 II 有条件的全排列,打印出[1,2,2,3,4,5]的所有4不在头并且3和5不挨...

  • LeetCode 力扣 47. 全排列 II

    题目描述(中等难度) 和上一道题类似,不同之处就是给定的数字中会有重复的,这样的话用之前的算法会产出重复的序列。例...

  • 47.全排列II

    题目给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例:****输入: [1,1,2]输出:[[1,1,...

  • 47. 全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 思路 python3解法 来源:力扣(LeetCo...

网友评论

      本文标题:leetcode题目47. 全排列 II(java)

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