008. 子集

news2024/9/21 18:32:55

1.题目链接:

78. 子集

2.解题思路:

2.1.题目要求:

给一个元素各不相同的数组 nums,返回各种可能的子集(子集不能重复)

比如:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

2.2.思路:

构建N叉树的基础上,把每一次递归的搜集到的值返回,终止条件是遇见叶子节点返回。

2.3.回溯三部曲:

2.3.1.确定回溯函数参数

需要预先用两个数组 path 和 result 来 存储路径 和 充当结果集,

参数传入默认的nums 和 startIndex,为了避免得到的子集重复,需要 startIndex 为参数,来让下一层递归的开始位置为上一层的+1。

vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex) {

2.3.2.确定终止条件

当递归遇见叶子节点,也就是递归的过程中 当初始位置startIndex >= 数组长度nums.size() 的时候

此时已经没有元素可以再取了,自然终止

if (startIndex >= nums.size()) {
    return;
}

2.3.3.确定单层遍历逻辑

很正常的递归和回溯的过程,回溯的参数 i + 1,是为了不重复遍历。同时为了输入最后一段 path 到 result 中,而不是在输入 result 之前就被终止条件阻止,就需要把 result 输入放在终止条件前。

result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己
//终止条件ifstartIndex >= nums.size()
for (int i = startIndex; i < nums.size(); i++) {
    path.push_back(nums[i]);    // 子集收集元素
    backtracking(nums, i + 1);  // 注意从i+1开始,元素不重复取
    path.pop_back();            // 回溯
}

2.3.4.总代码

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, int startIndex) {
        result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己
        if (startIndex >= nums.size()) { // 终止条件可以不加
            return;
        }
        for (int i = startIndex; i < nums.size(); i++) {
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        result.clear();
        path.clear();
        backtracking(nums, 0);
        return result;
    }
};

3.遇见的问题:

终止条件 startIndex >= 数组长度nums.size() 中,大于可不可以去掉?

不可以,可以去2.2思路下面的图看看,捏着 startIndex 和 num.size() 两者情况都有.

4.记录:

无。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做了8年前端,感谢那些优秀的后端,陪伴我工作,教会我成长

☆ 前段时间由于一时的头脑发热&#xff0c;写了一篇《做了8年前端&#xff0c;细说那些曾经让你浴霸不能的后端》的博客&#xff0c;虽然每个细节也都属实吧&#xff0c;但始终是一些负能量的东西&#xff0c;建议大家不要去看了&#xff0c;今年互联网情况已经这样了&#xf…

安卓APP源码和设计报告——体育馆预约系统

项目名称&#xff1a;体育馆体育场预约系统专业&#xff1a;班级&#xff1a;学号&#xff1a;姓名&#xff1a; 目 录 一、项目功能介绍3 二、项目运行环境3 1、开发环境3 2、运行环境3 3、是否需要联网3 三、项目配置文件及工程结构4 1、工程配置文件4 2、工程结构目…

磨金石教育摄影技能干货分享|上海随手拍——叶落满街,秋意未尽

步入十二月以来&#xff0c;气温也随之骤降&#xff0c;这时候才明显感到初冬已至。冬天的寒风就是最好的脱叶剂&#xff0c;走在街道上&#xff0c;抬眼望去两旁的树木多数已经稀疏。只有残留的绿意还在迎着微微的寒风摇动。 我最喜欢的是秋天&#xff0c;因为秋天的草木最有色…

基于keras与tensorflow手工实现ResNet50网络

前言 在文章 基于tensorflow的ResNet50V2网络识别动物&#xff0c;我们使用了keras已经提供的神经网络&#xff0c;完成了图像分类的。这个时候&#xff0c;小明同学就问了&#xff0c;那么我怎么自己去写一个神经网络来进行训练呢&#xff1f; 本文就基于tensorflow&#xff…

Redis原理篇——五种基本数据类型

一、Redis底层数据结构 1. SDS 获取字符串长度耗时&#xff1a; 由于Redis底层是C语言编写的&#xff0c;C语言中没有字符串这个概念&#xff0c;本质上都是字符数组&#xff0c;获取字符串长度就是遍历数组获取长度&#xff08;遍历到 \0结束标识结束 &#xff09;时间复杂度…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校毕业生信息采集系统05hj2

大四计算机专业的同学们即将面临大学4年的最后一次考验--毕业设计。通过完成毕业设计来对过去4年的大学学习生活做一个总结&#xff0c;也是检验我们学习成果的一种方式&#xff0c;毕业设计作品也是我们将来面试找工作的一个敲门砖。 选题前先看看自己掌握哪些技术点、擅长哪…

数据库常用的数据类型和约束条件

文章目录一. 数据库常用的数据类型1. 数字类型1.1 整数类型:INT(m)和BIGINT(m)1.2 浮点类型:DOUBLE(m,n)2. 字符类型2.1 定长字符:CHAR(n)2.2 变长字符:VARCHAR(n)2.3 变长字符:TEXT(n)3. 日期类型3.1 语法格式:3.2 注意事项二. 约束条件1.主键约束(PRIMARY KEY)1.1 注意事项1.…

[附源码]Python计算机毕业设计Django美发店会员管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Web压测工具http_load原理分析

01、前言 http_load是一款测试web服务器性能的开源工具&#xff0c;从下面的网址可以下载到最新版本的http_load&#xff1a; http://www.acme.com/software/http_load/ 这个软件一直在保持着更新&#xff08;不像webbench&#xff0c;已经是十年的老古董了。 webbench的源…

【Matplotlib绘制图像大全】(二十九):Matplotlib绘制热力图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

【经验分享】突然我的SM.MS的图床没法访问了(内附解决方法)

【经验分享】突然我的SM.MS的图床没法访问了&#xff08;内附解决方法&#xff09; 一大早写文章&#xff0c;发现Markdown里的图片全部都不能成功加载了&#xff0c;这个的确挺头疼的&#xff01; 文章目录1 说一说现象2 简单排查一下3 查找解决方案4 实施解决方案5 总结6 更多…

高楼扔鸡蛋问题

1.对应letecode链接 高楼扔鸡蛋问题 2.题目描述 解题思路 题目是这样&#xff1a;你面前有一栋从 1 到 N 共 N 层的楼&#xff0c;然后给你 K 个鸡蛋&#xff08;K 至少为 1&#xff09;。现在确定这栋楼存在楼层 0 < F < N&#xff0c;在这层楼将鸡蛋扔下去&#xff…

Windows使用ssh协议远程连接ubuntu linux子系统

Windows使用ssh协议远程连接ubuntu linux子系统一、Windows远程连接ubuntu linux子系统二、开启ubuntu ssh服务三、获取ubuntu子系统的ip地址四、从windows上通过ssh连接到ubuntu子系统五、后记一、Windows远程连接ubuntu linux子系统 当我们在windows上安装好ubuntu子系统后&…

Linux命令总结详细

Linux命令总结详细1.前言2.基础知识2.1.执行命令格式2.2.帮助命令2.2.1.man命令2.3.部分快捷键2.3.1.Tab键2.3.2.Ctrlc组合键2.3.3.Ctrll组合键2.4.服务运行命令2.5.服务开机启动命令3.系统工作命令3.1.date时间命令3.1.1.命令解释3.1.2.命令参数3.1.3.案例3.2.reboot重启命令3…

ESP-01S使用AT指令连接阿里云

这次分享下ESP8266-01S使用AT指令连接阿里云&#xff0c;为了后面stm32--esp-01s-阿里云&#xff08;MQTT&#xff09;做铺垫 目录 步骤&#xff1a; 1.烧录阿里云固件 首先我们打开->安信可官网下载阿里云的固件&#xff0c;如图 1.1串口助手与esp-01s接线说明 注&am…

C语言——VS2019实用调试技巧

前言 要想成为一个合格的程序员&#xff0c;不仅仅要会写代码&#xff0c;更要会调试代码。咔咔一通敲代码&#xff0c;敲出了BUG&#xff0c;这时就分两种程序员&#xff0c;一种是质疑编译器的程序员&#xff0c;“什么&#xff1f;我写出了BUG&#xff0c;是不是机器出了问…

什么是混淆矩阵精度、召回率、准确性、F1 分数、FPR、FNR、TPR、TNR?

在你的数据科学生涯的开始,混淆矩阵会非常混乱,我们会有很多问题,比如什么时候使用精度?什么时候使用召回?在哪些情况下可以使用精度?因此,我将尝试在本博客中回答这些问题。 什么是混淆矩阵? 混淆矩阵是一种将预测结果和实际值以矩阵形式汇总的方法,用来衡量分类问题…

带头双向循环链表的实现

目录前言节点声明链表的初始化尾插打印链表头插尾删头删查找节点指定位置插入指定位置删除链表销毁前言 之前讲过单链表的实现&#xff0c;在实现的过程中&#xff0c;我们会发现每次删除或者在前面插入节点的时候&#xff0c;都要提前保存上一个节点的地址。这样做十分麻烦&a…

大一新生HTML期末作业个人介绍博客 使用html+css+javascript+jquery技术制作网页,含有动画,hover效果,含有表格布局

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

RV1126/RV1109 IPC板 + RK3568+鸿蒙AI视频解决方案

近年来&#xff0c;云终端产品在办公、教育、工控等行业被广泛应用&#xff0c;其具有实用性强、运维量小、数据存储更安全等特点&#xff0c;深受市场青睐。而面对复杂光照环境、人流与车流、多变人体动作等复杂场景&#xff0c;成像质量和画面效果以及细节呈现能力&#xff0…