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();
        }
    }
}
相关推荐
晴空闲雲26 分钟前
数据结构与算法-线性表-线性表的应用
数据结构
@解忧杂货铺2 小时前
基于用户的协同过滤推荐算法实现(Java电商平台)
算法·机器学习·推荐算法
爱coding的橙子2 小时前
每日算法刷题Day31 6.14:leetcode二分答案2道题,结束二分答案,开始枚举技巧,用时1h10min
算法·leetcode·职场和发展
@ chen2 小时前
龟兔赛跑算法(Floyd‘s Cycle-Finding Algorithm)寻找重复数
算法
晨曦学习日记2 小时前
leetcode题解538:把二叉搜索树转换为累加树
算法
孟大本事要学习2 小时前
算法第13天|继续学习二叉树:平衡二叉树(递归)、二叉树所有路径(递归)、左叶子之和(递归)
学习·算法
wangjialelele2 小时前
双向链表——(有头双向循环链表)
数据结构·链表
梦境虽美,却不长2 小时前
数据结构 学习 链表 2025年6月14日08点01分
数据结构·学习·链表
无聊的小坏坏2 小时前
一文详解前缀和:从一维到二维的高效算法应用
数据结构·算法
泽02022 小时前
C++之模板进阶
开发语言·c++·算法