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

78. 子集

作者头像
lucifer210
发布于 2019-10-28 07:05:14
发布于 2019-10-28 07:05:14
52600
代码可运行
举报
文章被收录于专栏:脑洞前端脑洞前端
运行总次数:0
代码可运行

题目描述

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

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

示例:

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

这道题目是求集合,并不是 求极值,因此动态规划不是特别切合,因此我们需要考虑别的方法。

这种题目其实有一个通用的解法,就是回溯法。网上也有大神给出了这种回溯法解题的通用写法,这里的所有的解法使用通用方法解答。除了这道题目还有很多其他题目可以用这种通用解法,具体的题目见后方相关题目部分。

我们先来看下通用解法的解题思路,我画了一张图:

通用写法的具体代码见下方代码区。

关键点解析

  • 回溯法
  • backtrack 解题公式

代码

  • 语言支持:JS,C++

JavaScript Code:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * @lc app=leetcode id=78 lang=javascript
 *
 * [78] Subsets
 *
 * https://leetcode.com/problems/subsets/description/
 *
 * algorithms
 * Medium (51.19%)
 * Total Accepted:    351.6K
 * Total Submissions: 674.8K
 * Testcase Example:  '[1,2,3]'
 *
 * Given a set of distinct integers, nums, return all possible subsets (the
 * power set).
 *
 * Note: The solution set must not contain duplicate subsets.
 *
 * Example:
 *
 *
 * Input: nums = [1,2,3]
 * Output:
 * [
 * ⁠ [3],
 * [1],
 * [2],
 * [1,2,3],
 * [1,3],
 * [2,3],
 * [1,2],
 * []
 * ]
 *
 */
function backtrack(list, tempList, nums, start) {
    list.push([...tempList]);
    for(let i = start; i < nums.length; i++) {
        tempList.push(nums[i]);
        backtrack(list, tempList, nums, i + 1);
        tempList.pop();
    }
}
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    const list = [];
    backtrack(list, [], nums, 0);
    return list;
};

C++ Code:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        auto ret = vector<vector<int>>();
        auto tmp = vector<int>();
        backtrack(ret, tmp, nums, 0);
        return ret;
    }

    void backtrack(vector<vector<int>>& list, vector<int>& tempList, vector<int>& nums, int start) {
        list.push_back(tempList);
        for (auto i = start; i < nums.size(); ++i) {
            tempList.push_back(nums[i]);
            backtrack(list, tempList, nums, i + 1);
            tempList.pop_back();
        }
    }
};

相关题目

  • 39.combination-sum
  • 40.combination-sum-ii
  • 46.permutations
  • 47.permutations-ii
  • 90.subsets-ii
  • 113.path-sum-ii
  • 131.palindrome-partitioning
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑洞前端 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
46. 全排列
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutations 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
lucifer210
2019/10/14
4180
46. 全排列
40. 组合总和 II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
lucifer210
2019/10/10
4600
40. 组合总和 II
39. 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
lucifer210
2019/09/29
4500
39. 组合总和
力扣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
2020
力扣78题-子集
LeetCode 排列组合 题目汇总
Given a collection of distinct numbers, return all possible permutations.
Yano_nankai
2018/10/08
5920
子集问题-LeetCode 78、52(无重复子集,N皇后II)
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例:
算法工程师之路
2019/10/14
6920
子集问题-LeetCode 78、52(无重复子集,N皇后II)
回溯算法团灭排列/组合/子集问题
今天就来聊三道考察频率高,而且容易让人搞混的算法问题,分别是求子集(subset),求排列(permutation),求组合(combination)。这几个问题都可以用回溯算法解决。
lucifer210
2020/02/26
1.6K0
LeetCode 78. 子集(回溯)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2021/02/20
1840
LeetCode 78. 子集(回溯)
深度优先搜索(DFS)与回溯法:从全排列到子集问题的决策树与剪枝优化
深度优先搜索(DFS)和回溯法是解决复杂问题中不可或缺的算法工具,尤其在组合问题(如全排列、子集等)中,发挥着至关重要的作用。通过递归的方式,DFS 能够遍历问题的解空间,而回溯法则通过撤销不合法的选择,避免重复计算,提高效率。在解题过程中,剪枝是优化回溯法的重要手段,它通过提前排除无效路径,进一步减少了运算的复杂度。本文将深入探讨如何使用 DFS、回溯法及剪枝技术,构建解决全排列和子集问题的决策树,并优化算法的执行效率。
suye
2024/12/20
1840
深度优先搜索(DFS)与回溯法:从全排列到子集问题的决策树与剪枝优化
【python-leetcode78-子集】子集
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
西西嘛呦
2020/08/26
6330
N皇后问题如何写出简洁的最优解 - 回溯法及LeetCode应用详解
回溯法之所以称之为回溯法,是因为它其实是DFS/BFS+回溯操作进行的穷举。回溯和DFS/BFS的区别在于回溯操作。也有人把回溯法称为BFS/DFS,这没有错,但是不太准确的,回溯法是特殊的DFS或者BFS,因为DFS或者BFS在某些情况下无法递归处理所有的情况(即不完全穷举),需要执行一定的后悔操作,才能穷举所有情况。
Steve Wang
2021/01/14
5250
N皇后问题如何写出简洁的最优解 - 回溯法及LeetCode应用详解
【C++】算法集锦(3):回溯,从入门到入土,七道试题精选、精讲、精练
回溯算法,之前也是写过的,感觉还不错。但是之前分成两篇写了,现在重新整理一下,顺便我自己也回顾一下。
看、未来
2021/09/18
3830
回溯树求集合全排列和所有子集
本公众号主要推送关于对算法的思考以及应用的消息。算法思想说来有,分而治之,深度搜索,动态规划,回溯,贪心等,结合这些思想再去思考如今很火的大数据,云计算和机器学习,是不是也别有一番风味呢? 踏上算法之路,风景这边独好! 01 — 通过这篇文章,你学到什么 通过这篇文章,我们可以进一步体会到深度优先搜索算法在具体问题中的应用,通过详细地示意图,深刻明白递归调用时的进栈,出栈过程;最后通过Leetcode 相似解法的题目进一步加深对深度搜索算法的理解。 02 — 搜索算法 搜索算法,常见的几种形式,深度优先,
double
2018/04/02
1.1K0
回溯树求集合全排列和所有子集
Leetcode|子集|78. 子集(回溯+first索引)
简而言之,就是[1, 2, 3]包含[1, 2]的子集,通过递归实现。但时间复杂度过高,为 O(N⋅2N),因此我在力扣上提交也显示内存超时,但为了学习还是把代码放出来
SL_World
2021/09/18
3440
Backtracking - 78. Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set).
ppxai
2020/09/23
2320
【回溯算法】回溯,从入门到入土,七道试题精选、精讲、精练
前期准备,要玩得转回溯,递归的基础还是要有的,所以前些日子我就先把递归部分给办了。 【LeetCode】递归 原理入门+复杂度计算+练手试题
看、未来
2020/08/25
4570
【回溯算法】回溯,从入门到入土,七道试题精选、精讲、精练
​LeetCode刷题实战78:子集
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3070
​LeetCode刷题实战78:子集
Leetcode No.78 子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
week
2021/11/29
1490
Leetcode No.78 子集
所有子集 剑指 Offer II 079
给定一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
叶茂林
2023/07/30
1360
所有子集 剑指 Offer II 079
【回溯】学会全排列了吗?来看看子集问题!
​ 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
利刃大大
2025/02/02
730
【回溯】学会全排列了吗?来看看子集问题!
相关推荐
46. 全排列
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文