LeetCode 47. Permutations II

LeetCode 47. Permutations II (全排列II)

题目

链接

https://leetcode.cn/problems/permutations-ii/

问题描述

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

示例

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

提示

1 <= nums.length <= 8
-10 <= nums[i] <= 10

思路

和全排列相同,只需要多设置一个used数组,用于存放是否用过。

复杂度分析

时间复杂度 O(n2)
空间复杂度 O(n)

代码

Java

    List<List<Integer>> ans = new LinkedList<>();
    LinkedList<Integer> path = new LinkedList<>();

    public List<List<Integer>> permuteUnique(int[] nums) {
        boolean[] used = new boolean[nums.length];
        Arrays.sort(nums);
        trace(nums, used);
        return ans;
    }

    public void trace(int[] nums, boolean[] used) {
        if (path.size() == nums.length) {
            ans.add(new ArrayList<>(path));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == true) {
                continue;
            }
            if (used[i] == false) {
                used[i] = true;
                path.add(nums[i]);
                trace(nums, used);
                path.remove(path.size() - 1);
                used[i] = false;
            }
        }
    }
posted @ 2022-06-14 17:57  cheng102e  阅读(11)  评论(0编辑  收藏  举报