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

[LeetCode] 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 中的所有元素 互不相同

题目链接:

. - 力扣(LeetCode)

解题主要思路:

其实这道题,第一次写的话,不动手画个决策树还真的挺容易出错的。我们可以画个决策树,根节点为空(第1层),根节点除外,每层的节点为上一层的节点再选择是否插入nums。

以nums:[1,2,3]为例,第一层是空,第二层的话的节点有第一层的节点插入“1”,得到两个节点:[]和[1],第三层的节点分别为第二层的节点再选择是否插入“2”,第四层同理。

当我们要插入的数的下标 i == nums.size()时,说明遍历完了,此时需要将结果插入到ret中。

解题代码:

class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        return ret;
    }
    void dfs(vector<int>& nums, int pos)
    {
        // 结束条件
        if (pos == nums.size()) {
            ret.push_back(path);
            return;
        }
        // 选
        path.push_back(nums[pos]);
        dfs(nums, pos+1);
        path.pop_back();  // 恢复原本的path
        // 不选
        dfs(nums, pos+1);
    }
};


http://www.kler.cn/news/363914.html

相关文章:

  • Android Room(SQLite) too many SQL variables异常
  • 跨站脚本攻击XSS以及Cookie如何实现用户管理
  • 动态规划-子序列问题——300.最长递增子序列
  • 7. 配置
  • 安全见闻(3)——开阔眼界,不做井底之蛙
  • 每天10个js面试题(六)
  • 标准函数let、run、also、all、with、takeIf、takeUnless
  • [LeetCode] 207. 课程表
  • 【Java知识】一款强大的SQL处理库JSqlPaser
  • 【优选算法篇】在分割中追寻秩序:二分查找的智慧轨迹
  • Oracle CONNECT BY、PRIOR和START WITH关键字详解
  • MoCoOp: Mixture of Prompt Learning for Vision Language Models
  • PHP多功能图片编辑器
  • 深入解析Golang GMP
  • WebSocket Secure (WSS)
  • 在python中,导入Echart.js并运用可视化图表
  • docker run和docker start的区别
  • Rust编程语言变量的所有权(ownership)
  • Web前端-JavaScript输入输出语法
  • APP综合应用之业务场景脚本测试任务(5)--多重继承与总结
  • mov 转 mp4
  • 信号与系统学习:傅里叶级数
  • HarmonyOS 最新API12 创建云端一体化项目(带图展示)
  • 基于stm32的楼宇照明控制系统设计
  • 代码解释(10.20)
  • Oracle 第2章:安装与配置Oracle