47. 全排列 II - 力扣(LeetCode)

题目描述

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

输入示例

bash 复制代码
nums = [1,1,2]

输出示例

bash 复制代码
[[1,1,2], [1,2,1], [2,1,1]]

解题思路

解题代码

java 复制代码
class Solution {
    List<List<Integer>> result = new ArrayList<>();
    Deque<Integer> path = new ArrayDeque<>();
    public List<List<Integer>> permuteUnique(int[] nums) {
        int n = nums.length;
        boolean[] used = new boolean[n];
        backtrack(nums, used);
        return result;
    }

    public void backtrack(int[] nums, boolean[] used) {
        if(path.size() == nums.length) {
            result.add(new ArrayList<Integer>(path));
            return;
        }
        Set<Integer> set = new HashSet<>();
        for(int i = 0; i < nums.length; i++) {
            if(used[i] == true || set.contains(nums[i])) {
                continue;
            }
            path.addLast(nums[i]);
            set.add(nums[i]);
            used[i] = true;
            backtrack(nums, used);
            used[i] = false;
            path.removeLast();
        }
    }
}
相关推荐
南境十里·墨染春水3 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
@insist1233 小时前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
一只齐刘海的猫9 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1119 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
liulilittle10 小时前
固定数组时间轮的槽过载优化:桶链表与批次执行
网络·数据结构·链表
IronMurphy10 小时前
【算法五十七】146. LRU 缓存
算法·缓存
Irissgwe10 小时前
数据结构-栈和队列
数据结构·c++·c·栈和队列
两片空白11 小时前
数据容器集合set/frozenset
数据结构
凌波粒11 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展