LeetCode-47-全排列Ⅱ

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

题目链接:LeetCode-47-全排列Ⅱ

解题思路:注意题目中给的是包含重复数字,所以需要去重操作;

  1. 这道题不需要 startIndex,因为每次都从下标 0开始,是排列问题;
  2. 终止条件是path.size()==nums.length,在每个叶子节点收获结果;
  3. 最重要的是去重操作,到底是树枝去重还是树层 去重?应该是都可以的,只是效率上来说树层去重更快一些,所谓的树层去重,就是 numsi==numsi-1,以及前一个元素没有被使用过 usedi-1==false。
    代码实现:
java 复制代码
class Solution {
    // 和 46 全排列相比,多了2步去重的操作,树层去重
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);// 要先排序,方便处理相同的元素
        backTracking(nums, new boolean[nums.length]);
        return res;
    }

    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    public void backTracking(int[] nums, boolean[] used){
        if (path.size()== nums.length){
            res.add(new ArrayList<>(path));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            // used[i-1]=true : 说明树枝前一个元素已经取过
            // used[i-1]=false : 说明树层前一个元素没有取过
            // 如果同一个树层的元素使用过,则continue
            if (i>0 && nums[i]==nums[i-1] && used[i-1]==false){// 树层去重,当前没有使用,并且和前一个数不相等
                continue;
            }
            if (used[i]){// 当前的位置还没有使用过,必须加上这个判断,不然会有很多重复的组合
                continue;
            }
            path.add(nums[i]);
            used[i]=true;
            backTracking(nums, used);
            used[i]=false;
            path.remove(path.size()-1);
        }
    }
}
相关推荐
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦11 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下11 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J11 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛11 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有12 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu11111112 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS12 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b12 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人13 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全