【leetcode】深搜、暴搜、回溯、剪枝(C++)1

深搜、暴搜、回溯、剪枝(C++)1

  • 一、全排列
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 二、子集
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 三、找出所有子集的异或总和再求和
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 四、全排列II
    • 1、题目解析
    • 2、代码
    • 3、解析
  • 五、电话号码的字母组合
    • 1、题目描述
    • 2、代码
    • 3、解析


一、全排列

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

class Solution 
{
public:// 全局变量vector<vector<int>> ret;vector<int> path;bool check[7]; // 该题目最大到6--用以判断每个字符的使用情况vector<vector<int>> permute(vector<int>& nums) {dfs(nums);return ret;}void dfs(vector<int>& nums) {// 递归出口if(nums.size() == path.size()){ret.push_back(path);return;}for (int i = 0; i < nums.size(); i++) {if(check[i] == false){path.push_back(nums[i]);check[i] = true; // 标记用过了dfs(nums); // 递归// 回溯path.pop_back();check[i] = false;}}}
};

3、解析

在这里插入图片描述

二、子集

1、题目描述

leetcode链接

在这里插入图片描述

2、代码

代码1:

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){// 1、递归出口if(pos == nums.size()){ret.push_back(path);return;}// 2、选path.push_back(nums[pos]);dfs(nums, pos + 1); // 递归到下一层path.pop_back(); // 恢复现场// 3、不选dfs(nums, pos + 1);}
};

代码2:

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){// 1、递归出口ret.push_back(path);// 2、递归for (int i = pos; i < nums.size(); i++){path.push_back(nums[i]);dfs(nums, i + 1);path.pop_back(); // 恢复现场}}
};

3、解析

在这里插入图片描述
在这里插入图片描述

三、找出所有子集的异或总和再求和

1、题目描述

leetcode链接

在这里插入图片描述

2、代码

class Solution 
{
public:// 1、全局变量int sum = 0; // 记录最终结果int path = 0; // 记录当前异或后的值int subsetXORSum(vector<int>& nums) {dfs(nums, 0);return sum;}// 2、递归void dfs(vector<int>& nums, int pos){// 1、递归出口sum += path;// 2、往下递归for(int i = pos; i < nums.size(); i++){path ^= nums[i];dfs(nums, i + 1);path ^= nums[i];}}
};

3、解析

在这里插入图片描述

四、全排列II

1、题目解析

leetcode链接

在这里插入图片描述

2、代码

代码1:

class Solution 
{
public:// 1、全局变量vector<vector<int>> ret; // 记录返回的数组vector<int> path; // 记录路径bool check[9]; // 判断是否被使用过vector<vector<int>> permuteUnique(vector<int>& nums) {// 2、排序sort(nums.begin(), nums.end());// 3、进行递归dfs(nums, 0);return ret;}void dfs(vector<int>& nums, int pos){// 1、递归出口if(pos == nums.size()){ret.push_back(path);return;}// 2、每一层的循环for(int i = 0; i < nums.size(); i++){// 不合法情况进行剪枝if(check[i] == true || (i != 0 && nums[i] == nums[i - 1] && check[i - 1] == false))continue;// path进行增加path.push_back(nums[i]);check[i] = true;// 递归dfs(nums, pos + 1);// 回溯 -- 恢复现场path.pop_back();check[i] = false;}}
};

代码2:

class Solution 
{
public:// 1、全局变量vector<vector<int>> ret; // 记录返回的数组vector<int> path; // 记录路径bool check[9]; // 判断是否被使用过vector<vector<int>> permuteUnique(vector<int>& nums) {// 2、排序sort(nums.begin(), nums.end());// 3、进行递归dfs(nums, 0);return ret;}void dfs(vector<int>& nums, int pos){// 1、递归出口if(pos == nums.size()){ret.push_back(path);return;}// 2、每一层的循环for(int i = 0; i < nums.size(); i++){// 不合法情况进行剪枝if(check[i] == false && (i == 0 || nums[i] != nums[i - 1] || check[i - 1] == true)){// path进行增加path.push_back(nums[i]);check[i] = true;// 递归dfs(nums, pos + 1);// 回溯 -- 恢复现场path.pop_back();check[i] = false;}}}
};

3、解析

在这里插入图片描述

五、电话号码的字母组合

1、题目描述

leetcode链接

在这里插入图片描述

2、代码

class Solution 
{
public:// 全局变量string hash[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};string path; // 记录路径vector<string> ret; // 返回的组合vector<string> letterCombinations(string digits) {if(digits.size() == 0)return ret;dfs(digits, 0);return ret;}void dfs(string& digits, int pos){// 递归出口if(digits.size() == pos){ret.push_back(path);return;}// 循环找对应关系for(auto ch : hash[digits[pos] - '0']) // 掏出来字符串进行遍历当前下标所对应的字符串{// 尾插进去path.push_back(ch);dfs(digits, pos + 1);path.pop_back(); // 恢复现场}} 
};

3、解析

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取响应请求头里的信息

如图所示这是一个导出excel的接口&#xff0c;后端响应头部&#xff0c;要获取Content-Disposition里的值&#xff0c; 由于命名问题&#xff0c;没有办法用res.Content-Disposition的方式获取它的值 按理来说使用res[Content-Disposition]就可以获取到&#xff0c;但是咩有&…

「HarmonyOS」CustomDialogController自定义弹窗使用方法

需求背景&#xff1a; 在开发的过程中&#xff0c;总会遇到一些功能需要使用到弹窗进行信息的输入和修改&#xff0c;如用户个人信息的修改&#xff1b;在UI设计上每个App通常都会有各自的样式&#xff0c;而不是使用系统的标准样式&#xff0c;所以通常我们需要进行自定义弹窗…

云开发超多功能工具箱组合微信小程序源码/附带流量主

这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能&#xff0c;小程序内包含了40余个功能&#xff0c;堪称全能工具箱了&#xff0c;大致功能如下&#xff1a; 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫格 | 手持弹幕丨照片压缩 | 照片编…

【C#】MVVM架构

示例结果展示 前提了解 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。 Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等 View——可以理解为我们所看到的UI。前端界面。 View Model在View和Model之间,起到连接的作用,…

echarts图表插件

图表组件 ECharts&#xff0c;全称为Enterprise Charts&#xff0c;是一个使用JavaScript实现的开源可视化库。它主要用于数据可视化领域&#xff0c;能够方便地创建出直观、交互性强的图表。ECharts由百度团队开发&#xff0c;目前是Apache的顶级项目之一。ECharts支持的图表…

12. UE5 RPG使用GameplayEffect修改角色属性(三)

书接 11. UE5 RPG使用GameplayEffect修改角色属性&#xff08;二&#xff09; 前面&#xff0c;介绍了GameplayEffect的Instant和Duration的使用&#xff0c;这一篇主要介绍一下无限制时间类型的infinite的使用方式。 无限时间限制模式下&#xff0c;如果你的周期时间&#xff…

程序员知识点:Java和JavaScript有哪些区别与联系?

Java 和 JavaScript 是两种不同的编程语言&#xff0c;它们有以下区别和联系&#xff1a; 区别&#xff1a; 设计目的不同&#xff1a;Java 是一种面向对象的编程语言&#xff0c;主要用于企业级应用程序开发、移动应用程序开发等领域。而 JavaScript 是一种脚本语言&#xff…

leetcode 算法 67.二进制求和(python版)

需求 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 代码 class Solution…

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

文章目录 1.1 Git 简介&#xff1a;版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例&#xff1a;协作开发流程优化案例&#xff1a;功能开发与分支策略 1.1.3 拓展案例 1&#xff1a;代码审查与合并1.1.4 拓展案例 2&#xff1a;冲突解决 1.2 安装和配置 Git&#xff1a;首次设…

Vision Transformer(一):自注意力机制

1. 注意力机制 注意力本质上是模仿人的行为。这种行为可以描述为人在观察一些事物时&#xff0c;会对感兴趣的区域会产生更多的聚焦&#xff0c;而会选择性的忽视&#xff08;或者减少关注&#xff09;另一些区域。 举个简单的例子&#xff0c;一些对跑车感兴趣的人&#xff0…

新产品!可视化试卷搭建平台

hi, 大家好, 我是徐小夕. 之前和大家分享了很多可视化低代码和零代码的技术实现和产品设计思路, 也和大家分享了 H5-Dooring 零代码搭建平台的技术实现和未来规划, 今天继续和大家分享一下我们的新产品——橙子试卷. 橙子试卷 是一款可视化试卷/问卷搭建平台, 我们可以通过拖拽…

AVR 328pb触摸功能基本介绍和使用

AVR 328pb触摸功能基本介绍和使用 &#x1f4dd;ATMEGA328PB-AU外设中带外围触摸控制器&#xff08;PTC&#xff09;电容式触摸按钮、滑块和轮子24个自帽通道和144个互帽通道。&#xff08;ATMEGA328P没有的&#xff09; ✅PTC-外围触摸控制器 &#x1f343;低功耗、高灵敏度、…