美文网首页
全排列2

全排列2

作者: 环宇飞杨 | 来源:发表于2020-04-11 18:15 被阅读0次

题目

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

示例:

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

解题思路

和全排列类似写法,因要求不能重复,所以在剪枝方面需要考虑更多。
首先重复数字得到的排列结果也是一样的,所以遇到重复数字跳过即可。

  1. 排序后用 nums[i] == nums[i - 1];来判读是否遇到重复数字。
  2. 用visited[i - 1] != 1; 来判断上一个数字是否刚刚被回溯。

代码

class Solution {
    public List<List<Integer>> permuteUnique(int[] nums) {
        List res = new ArrayList();
        int[] visited = new int[nums.length];
        Arrays.sort(nums);
        getRes(res,nums,visited,new ArrayList());
        return res;
    }
    public void getRes(List res,int[] nums, int[] visited,List temp){
        if (temp.size() == nums.length){
            res.add(new ArrayList(temp));
            return;
        }
        for (int i = 0; i < nums.length; i++){
            if (visited[i] == 1) continue;
            if (i > 0 && nums[i] == nums[i - 1] && visited[i-1] != 1) continue;
            visited[i] = 1;
            temp.add(nums[i]);
            getRes(res,nums,visited,temp);
            visited[i] = 0;
            temp.remove(temp.size()-1);
        }
    }
}

相关文章

  • 组合与排列

    参考资料:1. 全排列题目2. 全排列官方解法3. 全排列题目23. 全排列题目2官方解法4. 可重复组合题目5....

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列2

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

  • YC-常考的题目

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

  • 46. Permutations

    算法 1: 递归数组 的全排列,等价于全排列与可能的取值组合得到。 算法 2: 计算一个排列 按字典升序排列的紧...

  • 全排列 嵌套循环转递归

    全排列给定一个数字列表,返回其所有可能的排列。 样例给出一个列表[1,2,3],其全排列为: [[1,2,3],[...

  • 子集、全排列、第k个排列

    子集输出 全排列输出 存在重复数字的全排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大...

  • 排列组合与回溯法

    排列,组合,回溯法 ex.1 ex.2 排列 全排列:从第一个数字起,每个数字分别与它后面的数字交换 去重全排列:...

  • 全排列

    回溯实现全排列 给定一组数,如:1,2,3。编程实现全排列形式:123,132,213,231,312,321

  • [LeetCode]46. 全排列

    46. 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3...

网友评论

      本文标题:全排列2

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