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,一经查实,立即删除!

相关文章

数据库的连接

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

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生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 定时器的两种使用方式…

网络报文分析程序的设计与实现(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;为船舶安全管理部门实现岸基可控的数据通信和动…

第 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(…

如何批量自定义视频画面尺寸

在视频制作和编辑过程中&#xff0c;对于视频画面尺寸的调整是一项常见的需求。有时候&#xff0c;为了适应不同的播放平台或满足特定的展示需求&#xff0c;我们需要对视频尺寸进行批量调整。那么&#xff0c;如何实现批量自定义视频画面尺寸呢&#xff1f;本文将为您揭示这一…

LLM之RAG实战(十三)| 利用MongoDB矢量搜索实现RAG高级检索

想象一下&#xff0c;你是一名侦探&#xff0c;身处庞大的信息世界&#xff0c;试图在堆积如山的数据中找到隐藏的一条重要线索&#xff0c;这就是检索增强生成&#xff08;RAG&#xff09;发挥作用的地方&#xff0c;它就像你在人工智能和语言模型世界中的可靠助手。但即使是最…

小心JDK20 ZipOutputStream

Oracle 團隊竟然這麽粗心&#xff0c;編譯JDK 20 時ZipOutputStream沒有編譯成功就發佈了。 所以這個20版本不可以使用ZipOutputStream。 GZIPInputStream 只能做最後的壓縮&#xff0c;不能添加多個附件ZipEntry。 下一個版本21不存在這個問題。 try(var zipOut new ZipOu…

数据分析——火车信息

任务目标 任务 1、整理火车发车信息数据&#xff0c;结果的表格形式为&#xff1a; 2、并输出最终的发车信息表 难点 1、多文件 一个文件夹&#xff0c;多个月的发车信息&#xff0c;一个excel&#xff0c;放一天的发车情况 2、数据表的格式特殊 如何分析表是一个难点 数…

案例102:基于微信小程序的旅游社交管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

解决VMware 虚拟机 ubuntu 20.04 异常关闭导致虚拟网卡 ens33 无法工作问题

问题描述 由于经常使用 SSH 远程链接 VMware 中的虚拟机 ubuntu&#xff0c;每次关闭都是挂起&#xff0c;时间久了&#xff0c;虚拟机运行有些卡顿了&#xff0c;此时可以通过 Linux 命令重启或者关闭 ubuntu&#xff0c;也可以之间使用 VMWare 中的【虚拟机】-- 【电源】-&g…