【算法——递归回溯】

devtools/2024/10/15 14:26:39/

这个东西还是很重要的,直接决定了你的动态规划章节的学习深度

78. 子集

方法1:

vector<vector<int>>V;
void dfs(vector<int> v,vector<int> nums,int index)
{if(index==nums.size()) V.push_back(v);else{v.push_back(nums[index]);dfs(v,nums,index+1);v.pop_back();dfs(v,nums,index+1);}
}

方法2:

算法讲解038【必备】常见经典递归过程解析_哔哩哔哩_bilibili

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;vector<vector<int>>se;
void dfs(vector<int>nums, vector<int>pat, int i, int size)
{if (i == nums.size()){vector<int>k;for (auto i = pat.begin(); i < pat.begin() + size; i++)k.push_back(*i);se.push_back(k);}else{pat[size] = nums[i];	dfs(nums, pat, i + 1, size + 1);dfs(nums, pat, i + 1, size );}
}int main()
{vector<int>nums = { 1,2,3 };vector<int>pat(nums.size());dfs(nums, pat, 0, 0);for (auto i : se){for (auto j : i)cout << j << " ";cout << endl;}return 0;
}

90. 子集 II

#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<algorithm>
using namespace std;//首先这个子集问题有重复元素,我们在每一个节点就收。
//会出现V中有重复的情况(简单一点就是直接用set代替vector)
//还有一种方法就是用一个和nums等长的bool数组
//说这个bool前,自己画一下{1,2,2}的树形图vector<vector<int>>V;
void dfs(vector<int>v,vector<int>nums, int index,vector<bool>bol)
{V.push_back(v);for (int i = index; i < nums.size(); i++){//bool分析://首先不能越界(i>0保护)//怎么判断是在判断是在当前树枝还是树层重复(画一下树形图,我这句话就不再抽象)//!bol[i-1]&&nums[i]==nums[i-1]就是前一个数没有选,并且当前和前一个相等。//什么时候会出现这种情况,自然是同一个树层。if (i > 0 && nums[i] == nums[i - 1] && !bol[i - 1]){//break;     //这里要注意不能是break,这里发现重复就跳跃这个数,往后面 continue;}v.push_back(nums[i]);bol[i] = 1;dfs(v, nums, i + 1,bol);v.pop_back();bol[i] = 0;}}int main()
{vector<int>nums = { 1,2,1,2 };sort(nums.begin(), nums.end());     //注意要排序vector<bool>bol(nums.size());dfs({}, nums, 0,bol);for (auto i : V){for (auto j : i)cout << j << " ";cout << endl;}return 0;
}


http://www.ppmy.cn/devtools/126203.html

相关文章

【获取简易网页存储的密码】

拜访客户&#xff0c;电脑端连上客户的访客网络后&#xff0c;发现手机还没连&#xff0c;同时网页上的密码被隐藏显示了&#xff0c;自己也忘了访客密码是多少了。这种安全性要求不高的网页隐藏密码如何查看&#xff1a; 1.如下&#xff0c;电脑连上了网络&#xff0c;但自己…

Linux 常用命令 - file 【识别文件类型】

简介 file 命令源自英语单词 “file”&#xff0c;直译为“文件”。在 Linux 系统中&#xff0c;file 命令用于确定文件类型。它通过检查文件的内容和某些情况下的文件头信息&#xff0c;来判断文件的具体类型&#xff08;如文本、二进制、执行文件等&#xff09;。 使用方式…

Pyspark中pyspark.sql.functions常用方法(1)

文章目录 pyspark sql functions&#xff08;1&#xff09;spark.rangecol alias columnlit 创建常量列broadcast 广播表coalesce 合并列 (none)isnan 判断nan值isnull 判断None值nanvl 合并列 &#xff08;nan&#xff09;udf 自定义函数rand 随机列 &#xff0c;randn 随机正…

嵌入式Linux开发板配置静态IP

嵌入式Linux开发板配置静态IP Chapter1 嵌入式Linux开发板配置静态IPChapter2 Linux命令之hwclock - 查询和设置硬件时钟 Chapter1 嵌入式Linux开发板配置静态IP 修改interfaces配置文件&#xff0c;普通用户interfaces文件权限只可读&#xff0c;首先切换到root权限。 sudo …

理解python中的变量

在 C 中&#xff0c;引用是某个变量的别名&#xff0c;一旦引用被初始化&#xff0c;就不能更改引用的目标。引用和原始变量指向的是同一个内存位置&#xff0c;不允许重新绑定。而 Python 的变量更像是指针或标签&#xff0c;可以在运行时重新指向不同的内存位置&#xff0c;即…

kubeadm 搭建k8s 1.28.2版本集群

kubeadm 搭建k8s 1.28.2版本集群 1、kubuadm介绍&#xff1a; kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具&#xff0c;这个工具能通过两条指令完成一个kubernetes 集群的部署&#xff1a; 创建一个Master 节点kubeadm init将Node 节点加入到当前集群中…

JavaScript全面指南(五)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南 目录 81、ES6 class关键字原理跟function什么区别 82、如何检…

Zilliz获Forrester报告全球第一;OB支持向量能力;Azure发布DiskANN;阿里云PG发布内置分析引擎

重要更新 1. Azure发布PostgreSQL向量索引扩展DiskANN&#xff0c;声称在构建HNSW/IVFFlat索引上&#xff0c;速度、精准度都超越pg_vector&#xff0c;并解决了pg_vector长期存在的偶发性返回错误结果的问题( [1] )。 2. 阿里云RDS PostgreSQL 发布AP加速引擎&#xff08;rds…