leetcode算法题之递归--综合练习(一)

此专题对我们之前所学的关于递归的内容进行一个整合,大家可以自行练习,提升自己的编码能力。

本章目录

  • 1.找出所有子集的异或总和在求和
  • 2.全排列II
  • 3.电话号码的字母组合
  • 4.括号生成
  • 5.组合
  • 6.目标和
  • 7.组合总和
  • 8.字母大小写全排列
  • 9.优美的排列

1.找出所有子集的异或总和在求和

找出所有子集的异或总和在求和
在这里插入图片描述

class Solution {int ret =0;int path =0;
public:int subsetXORSum(vector<int>& nums) {dfs(nums,0);return ret;}void dfs(vector<int>& nums,int pos){ret += path;for(int i=pos;i<nums.size();i++){path ^= nums[i];dfs(nums,i+1);path ^= nums[i];//异或的消消乐原理}}
};

2.全排列II

全排列II
在这里插入图片描述

class Solution {vector<vector<int>> ret;vector<int> path;bool check[9];
public:vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(),nums.end());dfs(nums,0);return ret;}// //法一:只关心不合法的,也就是不满足全排列要求的都剪枝掉// void dfs(vector<int>& nums,int pos)// {//     if(pos == nums.size())//     {//         ret.push_back(path);//         return;//     }//     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.push_back(nums[i]);//         check[i] = true;//         dfs(nums,pos+1);//         path.pop_back();//         check[i] = false;//     }// }//法二:只关心合法的,也就是满足全排列要求的void dfs(vector<int>& nums,int pos){if(pos == nums.size()){ret.push_back(path);return;}for(int i=0;i<nums.size();i++){if(check[i] == false&&(i==0||nums[i]!=nums[i-1]||check[i-1] == true)){path.push_back(nums[i]);check[i] = true;dfs(nums,pos+1);path.pop_back();check[i] = false;}}}
};

3.电话号码的字母组合

电话号码的字母组合
在这里插入图片描述

class Solution {string path;vector<string> ret;string hash[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:vector<string> letterCombinations(string digits) {if(digits.size() == 0){return ret;}dfs(digits,0);return ret;}void dfs(string& digits, int pos){if(pos == digits.size()){ret.push_back(path);return;}for(auto ch:hash[digits[pos]-'0']){path.push_back(ch);dfs(digits,pos+1);path.pop_back();}}
};

4.括号生成

括号生成
在这里插入图片描述

class Solution {vector<string> ret;string path;int left,right,n;
public://策略:左括号的数量等于右括号的数量//从头开始,左括号的数量大于等于右括号的数量vector<string> generateParenthesis(int _n) {n = _n;dfs();return ret;}void dfs(){if(right == n){ret.push_back(path);return;}if(left<n){path.push_back('(');left++;dfs();path.pop_back();left--;}if(left>right){path.push_back(')');right++;dfs();path.pop_back();right--;}}
};

5.组合

组合
在这里插入图片描述

class Solution {vector<vector<int>> ret;vector<int> path;int n,k;
public:vector<vector<int>> combine(int _n, int _k) {n = _n,k=_k;dfs(1);return ret;}void dfs(int pos){if(path.size() == k){ret.push_back(path);}for(int i=pos;i<=n;i++){path.push_back(i);dfs(i+1);path.pop_back();}}
};

6.目标和

目标和
在这里插入图片描述

class Solution {int ret;int aim;int n;
public:int findTargetSumWays(vector<int>& nums, int target) {aim = target;n = nums.size();dfs(nums,0,0);return ret;}void dfs(vector<int>& nums,int pos,int path){//path做参数if(pos == nums.size()){if(path == aim) {ret++;}return;}dfs(nums,pos+1,path+nums[pos]);dfs(nums,pos+1,path-nums[pos]);}
};
class Solution {int ret;int aim;int path;int n;
public:int findTargetSumWays(vector<int>& nums, int target) {aim = target;n = nums.size();dfs(nums,0,0);return ret;}void dfs(vector<int>& nums,int pos,int path){//path做全局变量if(pos == nums.size()){if(path == aim) {ret++;}return;}path +=nums[pos];dfs(nums,pos+1,path);path -= nums[pos];path -= nums[pos];dfs(nums,pos+1,path);path += nums[pos];}
};

7.组合总和

组合总和
在这里插入图片描述

class Solution {vector<vector<int>> ret;vector<int> path;int aim;
public:vector<vector<int>> combinationSum(vector<int>& c, int target) {aim = target;dfs(c,0,0);return ret;}void dfs(vector<int>& c,int pos,int sum){if(sum>aim) return;if(sum == aim){ret.push_back(path);return;}for(int i=pos;i<c.size();i++){path.push_back(c[i]);dfs(c,i,sum+c[i]);path.pop_back();}}
};

8.字母大小写全排列

字母大小写全排列
在这里插入图片描述

class Solution {vector<string> ret;string path;
public:vector<string> letterCasePermutation(string s) {dfs(s,0);return ret;}void dfs(string& s,int pos){if(pos == s.size()){ret.push_back(path);return;}if(s[pos]<'0' || s[pos]>'9'){//变path.push_back(change(s[pos]));dfs(s,pos+1);path.pop_back();}//不变path.push_back(s[pos]);dfs(s,pos+1);path.pop_back();}char change(char ch){if(ch>='a'&&ch<='z') ch -= 32;else ch += 32;return ch;}};

9.优美的排列

优美的排列
在这里插入图片描述

class Solution {bool check[16];int ret;int n;
public:int countArrangement(int _n) {n = _n;dfs(1);return ret;}void dfs(int pos){if(pos == n+1){ret++;return;}for(int i=1;i<=n;i++){if(!check[i] && (i%pos ==0 || pos%i == 0)){check[i] = true;dfs(pos+1);check[i] = false;}}}
};

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

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

相关文章

Qt实现FTP文件传输协议

FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它属于网络传输协议的应用层。它最主要的功能是在服务器与客户端之间进行文件的传输。这个协议使用的是明文传输。FTP服务器的功能除了单纯的…

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

Golang 接口

前言 在 Go 语言中&#xff0c;接口&#xff08;interface&#xff09;是一种类型&#xff0c;它规定了一组方法签名&#xff08;method signatures&#xff09;&#xff0c;但不实现这些方法。任何实现了接口中所有方法的类型都隐式地实现了该接口&#xff0c;无需显式声明继…

认证评价的方法

认证评价是对于个人或组织的能力、技能或知识的确认&#xff0c;通常用于确保质量、安全或合规性。以下是一些常用的认证评价方法&#xff1a; 资格审查 资格审查是认证评价的第一步&#xff0c;主要评估个人或组织是否具备参与认证的基本条件。例如&#xff0c;对于某些专业…

MFC与Qt多个控件响应统一响应消息处理

就目前使用C开发框架来说&#xff0c;今天来讲述下MFC框架下与Qt框架下&#xff0c;如何让多个控件响应统一消息处理方法。 功能&#xff1a;假设有5个按钮&#xff0c;需要响应同一个处理函数&#xff0c;该如何实现呢&#xff1f; Qt方式 开发环境&#xff1a;win10 VS201…

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生DevOps容器持续交付微服务 云计算 在讲云原生之前&#xff0c;先来讲讲云计算 其中云原生属于技术架构理念&#xff0c;而云计算提供应用所需的基础资源&#xff0c;云计算是云原生的基础&#xff0c;两者是相辅相成的 云计算简单来说&a…

嵌入式(四)定时器 | 定时器功能 分类 定时器工作模式 寄存器全介绍

文章目录 1 定时器工作原理2 定时器功能3 定时器分类3.1 定时器13.2 定时器23.3 定时器3和定时器43.4 睡眠定时器3.5 看门狗定时器 4 定时器工作模式4.1 自由运行模式4.2 模模式4.3 正计数/倒计数模式 5 定时器1寄存器5.1 计数寄存器5.2 计数控制寄存器 6 定时器的两种使用方式…

Android 打开热点2.4G系统重启解决

Android 打开热点2.4G系统重启解决 文章目录 Android 打开热点2.4G系统重启解决一、前言二、过程分析1、Android 设备开机后第一次打开热点2.4G系统重启2、日志分析3、设备重启原因 三、解决方法四、其他1、wifi/有线网 代理信息也可能导致系统重启2、Android13 热点默认5G频道…

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上&#xff0c;参照教材中各层报文的头部结构&#xff0c;结合使用 wireshark 软件&#xff08;下载地址 https://www.wireshark.org/download.html#releases&#xff09;观察网络各层报文捕获&#xff0c;解析和分析的过程&#xff08;如下 图所示&a…

【Linux基础】Linux主要指令的详解(指令补充)

1.cp指令&#xff08;重要&#xff09; 语法&#xff1a; cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#xff0c;则它会把前面指…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说&#xff0c;w控制函数曲线的方向&#xff0c;b控制曲线水平方向位移&#xff0c;w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证&#xff0c;有限神经…

Linux查找命令@which、find

目录 which概念语法作用 find概念语法按文件名查找按文件大小查找 作用演示一演示二演示三 通配符 which 概念 which 是一个常用的 Linux/Unix 命令&#xff0c;用于查找并显示指定命令的绝对路径。 语法 which 要查找的命令 》无参数。 》 which后面&#xff0c;跟要查找绝对…

【CentOS 7.9】死机卡住如何处理

一、解决办法 1.打开tty2 按下组合键&#xff1a;ctrl alt F2 进入 tty2 2.进入 root 权限 su root3.杀死该用户的所有进程&#xff08;相当于 windows 里面的注销用户&#xff09; 请注意&#xff0c;用户名应该全部使用小写字母&#xff0c;如我的用户名叫 Ragdoll&am…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 &#x1f957;介绍&#x1f35b;使用说明&#x1f6a9;config.json 说明&#x1f6a9;启动&#x1f6a9;关闭&#x1f6a9;什么时候开始录制&#xff1f;&#x1f6a9;什么时候触发录制&#xff1f;&#x1f6a9;调参 &#x1f957;介绍 检测画面变化…

Javaweb之Mybatis的基础操作之查询操作的详细解析

1.6 查询 1.6.1 根据ID查询 在员工管理的页面中&#xff0c;当我们进行更新数据时&#xff0c;会点击 “编辑” 按钮&#xff0c;然后此时会发送一个请求到服务端&#xff0c;会根据Id查询该员工信息&#xff0c;并将员工数据回显在页面上。 SQL语句&#xff1a; select id,…

大型语言模型的幻觉问题

1.什么是大模型幻觉&#xff1f; 在语言模型的背景下&#xff0c;幻觉指的是一本正经的胡说八道&#xff1a;看似流畅自然的表述&#xff0c;实则不符合事实或者是错误的。 幻觉现象的存在严重影响LLM应用的可靠性&#xff0c;本文将探讨大型语言模型(LLMs)的幻觉问题&#x…

求两个数之间的最小公约数

目录 前言 方法&#xff1a;求两个数之间的最小公约数 1.欧几里得算法 2.枚举法 3.公共因子积 4.更相减损术 5.Stein算法 解题&#xff1a;在链表中插入最大公约数 总结 前言 今天刷每日一题&#xff1a;2807. 在链表中插入最大公约数 - 力扣&#xff08;LeetCode&#xff09;…

基于X86的助力智慧船载监控系统

船载综合监控系统结合雷达、AIS、CCTV、GPS等探测技术&#xff0c;以及高度融合的实时态势与认知技术&#xff0c;实现对本船以及范围内船舶的有效监控&#xff0c;延伸岸基监控中心监管范围&#xff0c;保障行船安全&#xff0c;为船舶安全管理部门实现岸基可控的数据通信和动…

【通过javascript实现:长时间未对html页面操作,自动退出系统,返回至login.html】

功能&#xff1a;针对某html页面&#xff0c;如果长时间没有对页面进行任何操作&#xff0c;则退出系统&#xff0c;返回至login.html 思路分析&#xff1a; step1 设置超时时间&#xff1a;timeoutDuration10分钟&#xff0c;因为是以毫秒为单位&#xff0c;所以需要乘以100…

第 121 场 LeetCode 双周赛题解

A 大于等于顺序前缀和的最小缺失整数 模拟&#xff1a;先求最长顺序前缀的和 s s s &#xff0c;然后从 s s s 开始找没有出现在 n u m s nums nums 中的最小整数 class Solution { public:int missingInteger(vector<int> &nums) {unordered_set<int> vis(…