当前位置: 首页 > news >正文

全排列II力扣--47

目录

题目

思路 

代码


题目

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

示例 1:

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

示例 2:

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

思路 

去重一定要对元素进行排序,这样我们才方便通过相邻的节点来判断是否重复使用了

一般来说:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果

对于排列问题,树层上去重和树枝上去重,都是可以的,但是树层上去重效率更高!

这么说是不是有点抽象?

来来来,我就用输入: [1,1,1] 来举一个例子。

树层上去重(used[i - 1] == false),的树形结构如下:

47.全排列II2

树枝上去重(used[i - 1] == true)的树型结构如下:

47.全排列II3

大家应该很清晰的看到,树层上对前一位去重非常彻底,效率很高,树枝上对前一位去重虽然最后可以得到答案,但是做了很多无用搜索。

那如果都可以,直接去掉哪个条件可以吗?

不可以!得一直是 true 或者一直是false 才可以,而不是 一会是true 一会又是false

代码

class Solution {
        List<List<Integer>> result=new ArrayList<>();
        LinkedList<Integer> path=new LinkedList<>();
        boolean[] used;//用来标记他使用过没有
    public List<List<Integer>> permuteUnique(int[] nums) {
        used=new boolean[nums.length];
        Arrays.sort(nums);//先排序,让相同的数字排列在一起
        Arrays.fill(used, false);
        backTracking(nums,used);
        return result;
    }
    public void backTracking(int[] nums,boolean[] used){
        if(path.size()==nums.length){
            result.add(new ArrayList<>(path));//叶子节点,收集
        }
        for(int i=0;i<nums.length;i++){
            if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false){//重复
                continue;
            }
            if(used[i]==false){//表示数字不能重复取
            used[i]=true;
            path.add(nums[i]);
            backTracking(nums,used);
            path.remove(path.size()-1);//回溯
            used[i]=false;
            }
        }
    }
}

相关文章:

  • STM32——HAL库开发笔记24(定时器5—超声波测距)(参考来源:b站铁头山羊)
  • 解析第十一页
  • H13-821 V3.0 HCIP 华为云服务架构题库
  • 基于 spring boot+vue 的仓储管理系统 的设计与实现
  • mac修改docker的daemon.json 镜像文件
  • 读书笔记 - 重学Java设计模式
  • 全市场大模型分类及对比分析报告
  • python unzip file
  • Adobe After Effects的动画制作
  • iOS手机App爬虫- (1) Mac安装Appium真机运行环境
  • 神经网络八股(4)
  • 【探寻C++之旅】第六章:STL
  • 力扣2454. 下一个更大元素 IV
  • 千峰React:函数组件使用(3)
  • 虚实结合双机导航-gazebo-ros
  • Nacos + Dubbo 实现微服务的Rpc调用
  • # GaussDB 学习进阶路线-基础篇:从零入门到核心操作实战指南
  • 中国历代政治得失读书笔记
  • 【Win10】Anaconda + Pycharm 环境搭建教程
  • Linux下安装Nginx服务及systemctl方式管理nginx详情
  • 同方云罐网站设计/南宁做网站公司
  • 现在做网站开发吗/猪八戒网接单平台
  • 小程序商城系统/南阳seo
  • 芷江建设局网站/长沙seo培训
  • 5g网站建设公司/竞价系统
  • 织梦商城网站模板/独立站怎么建站