题目:78. 子集

题目描述:

给你一个整数数组,数组中元素互不相同。返回数组中所有可能的子集,且子集不能重复

什么是子集?举个例子:原数组[1, 2, 3][]、[1]、[1, 2]、[1, 3]、[1, 2, 3]、[2]、[2, 3]、[3]这些都是原数组的子集。所以说子集就是原数组中零个或几个元素组成的集合。而且,子集是无序的,[1, 2][2, 1]是同一个子集,所以说虽然[2, 1]也是原数组的子集,但是题目要求子集不能重复,所以不能在结果中一起出现。

思路:

其实这一题思路和组合总数全排列很像,也是回溯。只不过每次递归的时候,不能像别的题可以从0开始穷举,那样会导致子集重复,所以要每次递归的时候,传入一个开始下标startIndex,这样就能避免子集重复问题。

步骤:

回溯模版可以看前面的全排列或者组合总数题目讲解,这里就不赘述。

本题主要是回溯方法怎么写,所以下面步骤是回溯方法的步骤。

1、先定义好回溯方法的入参,数组,本次递归穷举的开始下标

2、定义好回溯方法后,方法里首先确定回溯结束的条件

这一题可以不需要回溯结束条件。因为这一题本身就是中间状态的子集也需要收集,并没有说子集长度多少或者什么别的条件的时候才收集。而且不加回溯结束条件也不会导致无限递归,因为循环中,开始下标是不断增大的,等到开始下标达到数组长度的时候,自然循环终止!

3、下面就是开始穷举,伪代码如下

for (int i = startIndex; i < nums.length; i++) {
将元素放入数组
迭代回溯方法(传入的开始下标是 i + 1,因为下个迭代从 i + 1 开始遍历)
将元素从数组中删除,回溯
}

代码:

    List<List<Integer>> ans;
List<Integer> list; public List<List<Integer>> subsets(int[] nums) {
ans = new ArrayList<>();
list = new ArrayList<>(); process(nums, 0);
return ans;
} public void process(int[] nums, int startIndex) {
ans.add(new ArrayList<>(list)); // 子集不讲究顺序,所以[1,2]和[2,1]是同一子集
// 题目要求不能返回重复子集
// 所以 i 不能从 0 开始,要从 startIndex 开始。
// 这样才能保证不断往后找,不能回头找
for (int i = startIndex; i < nums.length; i++) {
list.add(nums[i]);
process(nums, i + 1);
list.remove(list.size() - 1);
}
}

LeetCode HOT 100:子集(简单易懂的回溯)的更多相关文章

  1. Leetcode题目78.子集(回溯-中等)

    题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1] ...

  2. LeetCode Top 100 Liked 点赞最高的 100 道算法题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...

  3. [Leetcode 78]求子集 Subset

    [题目] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The ...

  4. [LeetCode] 17. 电话号码的字母组合 ☆☆☆(回溯) ###

    描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23"输出:[&q ...

  5. [LeetCode] Top 100 Liked Questions

    [LeetCode] Top 100 Liked Questions # Title Acceptance Difficulty 1 Two Sum 38.80% Easy 2 Add Two Num ...

  6. [LeetCode] Subsets II 子集合之二

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...

  7. leetcode top 100 题目汇总

    首先表达我对leetcode网站的感谢,与高校的OJ系统相比,leetcode上面的题目更贴近工作的需要,而且支持的语言广泛.对于一些比较困难的题目,可以从讨论区中学习别人的思路,这一点很方便. 经过 ...

  8. Leetcode题目46.全排列(回溯+深度优先遍历+状态重置-中等)

    题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], ...

  9. LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...

  10. [LeetCode] 17. 电话号码的字母组合(回溯)

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[& ...

随机推荐

  1. QML 信号与响应方法的总结

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16748191.html 如果面试过程中,面试官想了解你对 ...

  2. 关于aws cli命令的exit/return code分析

    最近总是收到一个备份脚本的失败邮件,脚本是之前同事写的,没有加入任何有调试信息,及有用的日志 于是去分析 ,脚本中有一条 aws s3 sync $srclocal  $dsts3 命令,然后根据这条 ...

  3. HBase(1/5)

    HBase学习(一) 一.了解HBase 官方文档:https://hbase.apache.org/book.html 1.1 HBase概述 HBase 是一个高可靠性.高性能.面向列.可伸缩的分 ...

  4. 不安装运行时运行 .NET 程序 - NativeAOT

    大家好,先祝大家国庆快乐.不过大家看到这篇文章的时候估计已经过完国庆了 . 上一篇我们写了如何通过 SelfContained 模式发布程序(不安装运行时运行.NET程序)达到不需要在目标机器上安装 ...

  5. 编写HelloWorld并运行

    1在任意地方右键点新建 2创建一个文本文档 3修改名字,改为HelloWorld.java 4打开文件扩展名,查看后缀 打开后再去看文件名后缀有没有.txt,如果有的话就不是java文件,把后缀的.t ...

  6. 堆内存动态分配情况和jvm调优方向

    由上图可以看出: 堆中分为新生代(占堆1/3内存)和老年代(占堆2/3内存), 新生代又分为Eden区(占新生代内存的8/10)和survivor区(占新生代内存的2/10), survivor区又分 ...

  7. 一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 41.spring的事务传播机制 42 .spring事务什么时候会失效 43 .什么的是bean的自动装配.有哪些方式? ...

  8. JavaScript基础&实战(2)js中的强制类型转换、运算符、关系运算符、逻辑运算符、条件运算符

    文章目录 1.强制类型转换Number 1.1 代码 1.2 测试结果 2.进制表示 2.1 代码 2.2 测试结果 3.强制类型转换为Boolea 3.1 代码 3.2 测试结果 4.运算符 4.1 ...

  9. SQL---ltrim()和rtrim()函数的使用

    背景 去除字符串首尾空格大家肯定第一个想到trim()函数,不过在sqlserver中是没有这个函数的,却而代之的是ltrim()和rtrim()两个函数. 看到名字所有人都 知道做什么用的了,ltr ...

  10. vulnhub靶场之CORROSION: 2

    准备: 攻击机:虚拟机kali.本机win10. 靶机:CORROSION: 2,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com ...