前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >78. 子集

78. 子集

作者头像
张伦聪zhangluncong
发布于 2022-10-26 09:56:16
发布于 2022-10-26 09:56:16
25700
代码可运行
举报
运行总次数:0
代码可运行

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

解:标准dfs深度优先回溯算法。回溯算法的基本形式是“递归+循环”,正因为循环中嵌套着递归,递归中包含循环,这才使得回溯比一般的递归和单纯的循环更难理解,其实我们熟悉了它的基本形式,就会觉得这样的算法难度也不是很大。原数组中的每个元素有两种状态:存在和不存在。

  • 外层循环逐一往中间集合 tmp 中加入元素 nums[i],使这个元素处于存在状态
  • 开始递归,递归中携带加入新元素的 tmp,并且下一次循环的起始是 i 元素的下一个,因而递归中更新 i 值为 i + 1
  • 将这个从中间集合 tmp 中移除,使该元素处于不存在状态
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        List<Integer> tmp = new ArrayList<Integer>();
        dfs(result, tmp, nums, 0);
        return result;
    }

    private void dfs(List<List<Integer>> result, List<Integer> tmp, int[] nums, int index) {
        result.add(new ArrayList<Integer>(tmp));
        for (int i = index; i < nums.length; i++) {
            tmp.add(nums[i]);
            dfs(result, tmp, nums, i + 1);
            tmp.remove(tmp.size() - 1);
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
216. 组合总和 III
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
张伦聪zhangluncong
2022/10/26
2280
小白真能看一篇文章就学会全排列算法吗?
今天是小浩算法 “365刷题计划” 第97天 。为大家分享如何用算法来求全排列!话不多说,直接看题!
程序员小浩
2020/05/25
7400
【一天一大 lee】子集 (难度:中等)-Day20200920
在选择多个原数组的元素组成新成组合时,对于任何一个原数组的元素在新的组合中都可以对其有两种选择形式:当前位置选择或者不选择。
前端小书童
2020/09/24
2780
【一天一大 lee】子集 (难度:中等)-Day20200920
leetcode题解 | 78. 子集
这个题目很容易想到使用DFS的方式来解决,因为组合的题容易产生转移方程,这样也是没有什么问题的。
ACM算法日常
2018/08/07
7200
LeetCode78.子集
 dfs经典题,对每一个数字都有一个boolean数组去对应,没选过就是false,选过就是true,在边界条件中进行枚举,将所有结果为true的下标对应的数值添加到List中即可  不好想的地方在于递归的部分,每个数都可以选或者不选,那么如何来表示选,选了就将v[idx]标记为true,不选就将v[idx]标记为false,不论选还是不选,都要进行递归
mathor
2018/07/24
5070
LeetCode78.子集
所有子集
给定一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
酒楼
2024/01/06
1340
LeetCode 78. 子集(回溯)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2021/02/20
1900
LeetCode 78. 子集(回溯)
Leetcode No.78 子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
week
2021/11/29
1520
Leetcode No.78 子集
Day15-递归&回溯-无重复数组的子集
本来昨天题的代码都写完了,但pm姐姐说,这个需求明天必须上,没办法,昨天就没时间写文章了
BUPTrenyi
2019/07/15
4570
Day15-递归&回溯-无重复数组的子集
☆打卡算法☆LeetCode 78、子集 算法解析
链接:78. 子集 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
2810
☆打卡算法☆LeetCode 78、子集  算法解析
力扣78题-子集
力扣78. 子集 题目描述: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 <= nums.length <= 10 -10 <= nums[i] <= 10 nums 中的
ccf19881030
2023/02/26
2080
力扣78题-子集
LeetCode46. 全排列
本文最后更新于 517 天前,其中的信息可能已经有所发展或是发生改变。 一、介绍 这是基础的回溯题了。 二、题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] Related Topics 回溯算法 \n 👍 1046 👎 0 三、代码 class Solution { private List<List
Yuyy
2022/06/28
1240
面试超级爱问的全排列!!!
假如我们不是做算法题,而是做数学题。我们会一个位置一个位置的来考虑,先写出以1开头的排列,再写出以2开头的排列,最后写出以3开头的排列。
程序员小浩
2020/09/30
6140
面试超级爱问的全排列!!!
[LeetCode] 78. Subsets
【原题】 Given a set of distinct integers, nums, return all possible subsets. Note: The solution set
用户1148830
2018/01/03
6670
LeetCode通关:连刷十四题,回溯算法完全攻略
例如我们在查找二叉树所有路径的时候,查找完一个路径之后,还需要回退,接着找下一个路径。
三分恶
2021/09/23
9930
LeetCode通关:连刷十四题,回溯算法完全攻略
回溯到底怎么用?
在学习了回溯之后,我们就可以先进行画图分析【图片来自代码随想录: 连接代码随想录 (programmercarl.com)】
用户11097514
2024/05/30
1040
回溯到底怎么用?
90. 子集 II
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 解:先对数组排序,然后结果使用set去重 public List<List<Integer>> subsetsWithDup(int[] nums) { Set<List<Integer>> result = new HashSet<
张伦聪zhangluncong
2022/10/26
1570
两仪生四象,四象生八卦---滚雪球壮大子集的队伍(详尽动画演示滚雪球)|Java 刷题打卡
啵啵肠
2023/11/29
1430
leetcode 78. 子集 js 实现
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
蓓蕾心晴
2022/09/24
2260
LeetCode 78.子集 - Go 实现
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
王小明_HIT
2023/03/01
2030
LeetCode 78.子集 - Go 实现
相关推荐
216. 组合总和 III
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验