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

【LeetCode-中等题】78. 子集

文章目录

    • 题目
    • 方法一:动态规划
    • 方法二:递归加回溯(关键----startIndex)

题目

在这里插入图片描述
注意:这里的nums数组里面的元素是各不相同的,所以不存在去重操作

方法一:动态规划

在这里插入图片描述
在这里插入图片描述

    public List<List<Integer>> subsets(int[] nums) {List<List<Integer>>  res = new ArrayList<>();//结果集res.add(new ArrayList<>());// 首先将空集加入解集中int n =  nums.length;List<Integer> zres = null;for(int i = 0 ; i < n ; i++){int size = res.size(); // 当前子集数for(int j = 0 ; j<size ;j++){zres = new ArrayList<>(res.get(j));// 拷贝所有子集zres.add(nums[i]);// 向拷贝的子集中加入当前数形成新的子集res.add(zres);// 向lists中加入新子集}}return res;}

方法二:递归加回溯(关键----startIndex)

参考讲解视频:回溯算法解决子集问题,树上节点都是目标集和! | LeetCode:78.子集

根据nums[1,2,3] 可以画出树图,收获的结果集为所有节点,并且根据startIndex 每次只能取startIndex 后面的数,这样可以避免取到【1,2】 【2,1】这样的集合 这两个集合其实是同一个子集,所以每次递归都让startIndex +1 让递归后的只能取startIndex 后面的数

并且注意回溯(在递归后删除递归前加入的数)
在这里插入图片描述

在这里插入图片描述

    List<List<Integer>> res = new ArrayList<>();//结果集public List<List<Integer>> subsets(int[] nums) {List<Integer> zres  = new ArrayList<>();int  startIndax = 0;//每一次取子结果的开始位置,第一次肯定从第一个位置开始dfsback(nums,startIndax,zres);return res;}//递归+回溯public void  dfsback(int[]nums,int startIndax, List<Integer> zres){res.add(new ArrayList<>(zres));//收获结果if(startIndax >= nums.length) return ;//这个条件有没有都没关系  因为如果startIndax >= nums.length  那么下面的for循环根本不会执行  自然会return掉for(int i = startIndax ; i<nums.length  ;i++){zres.add(nums[i]);//收获子结果集dfsback(nums,i + 1 ,zres);//往下递归zres.remove(zres.size()-1);//回溯,还原状态}}
http://www.lryc.cn/news/156538.html

相关文章:

  • 学习设计模式之代理模式,但是宝可梦
  • 自学Python01-创建文件写入内容
  • Qt —UDP通信QUdpSocket 简介 +案例
  • 五大类注解和方法注解详解
  • 机器人中的数值优化(十)——线性共轭梯度法
  • 数据结构与算法之贪心动态规划
  • 【网络编程】网络基础概念
  • 连接虚拟机报错 Could not connect to ‘192.168.xxx.xxx‘ (port 22): Connection failed.
  • 数学建模--Topsis评价方法的Python实现
  • 超越时间与人力的软件开发智慧:《人月神话》
  • Java Stream 流对象(实用技巧)
  • 【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏
  • 简易版人脸识别qt opencv
  • 如何系统地学习 JavaScript?
  • 对称二叉树(Leetcode 101)
  • 动手学深度学习(2)-3.5 图像分类数据集
  • C标准输入与标准输出——stdin,stdout
  • 如何将home目录空间扩充到根目录下
  • Ceph PG Peering数据修复
  • 服务器上使用screen和linux的基本操作
  • Kafka3.0.0版本——文件存储机制
  • Linux如何安装MySQL
  • 确保网络的安全技术介绍
  • 机器学习练习
  • 算法通关村第十九关——最小路径和
  • Linux 访问进程地址空间函数 access_process_vm
  • selenium 动态爬取页面使用教程以及使用案例
  • 小程序中如何查看会员的积分和变更记录
  • 音视频 ffmpeg命令直播拉流推流
  • Python钢筋混凝土结构计算.pdf-T001-混凝土强度设计值