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

【算法——递归回溯】

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

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.lryc.cn/news/460223.html

相关文章:

  • 手机在网状态接口的使用和注意事项
  • WebGl 使用uniform变量动态修改点的颜色
  • Leetcode 划分字母区间
  • 可编辑div遇到的那些事
  • 什麼是高速HTTP代理?
  • 三子棋(C 语言)
  • HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
  • 纯血鸿蒙启动公测,爱加密鸿蒙加固平台发布,助力鸿蒙应用安全运营!
  • MySQL中 truncate、drop和delete的区别
  • 什么开放式耳机值得买?开放式耳机推荐排行榜!
  • Apache Doris的分区与分桶详解
  • docker详解介绍+基础操作 (二)info详解
  • C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
  • 探索 C# 常用第三方库与框架
  • NodeJS GRPC简单的例子
  • 无人机之三维航迹规划篇
  • 风格迁移-StyTr 2 : Image Style Transfer with Transformers
  • 上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • 记录搜罗到的Matlab 对散点进行椭圆拟合
  • 分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
  • 文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
  • redis在项目中运用(基础)
  • libaom 源码分析系列:svc_encoder_rtc.cc 文件
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • MySQL Server、HeidiSQL(MySQL 数据库工具)
  • 矩阵相关算法
  • 微信小程序-封装通用模块
  • Modnet 人像抠图(论文复现)
  • 利用session机制造测试账号,无需前端也可以测试后端接口
  • JAVA_18