【递归、搜索与回溯】综合练习

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


目录

  • 👉🏻找出所有子集的异或总和再求和
  • 👉🏻全排列 II
  • 👉🏻电话号码的字母组合
  • 👉🏻括号生成
  • 👉🏻组合

👉🏻找出所有子集的异或总和再求和

原题链接:找出所有子集的异或总和再求和

mycode:

class Solution {
public:vector<vector<int>> res;vector<int> path;void dfs(vector<int>& nums,int n){for(int i = n ;i<nums.size();i++){path.push_back(nums[i]);dfs(nums,i+1);path.pop_back();}res.push_back(path);}int subsetXORSum(vector<int>& nums) {dfs(nums,0);int Sum  = 0;for(int i = 0;i<res.size();i++){int sum = 0;for(auto e:res[i]){sum^=e;}Sum+=sum;}return Sum;}
};

优化代码(纯递归):

class Solution {
public:int Sum = 0,sum = 0;void dfs(vector<int>& nums,int n){for(int i = n ;i<nums.size();i++){sum^=nums[i];dfs(nums,i+1);sum^=nums[i];//再异或一遍可以消掉}Sum+=sum;}int subsetXORSum(vector<int>& nums) {dfs(nums,0);return Sum;}
};

👉🏻全排列 II

原题链接:全排列 II

mycode:

class Solution {
public:vector<vector<int>> ret;vector<int> path;bool check[8];//检查该位置是否被用过了,true说明被用过了 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 && (i==0||nums[i]!=nums[i-1]||check[i-1]==true))//此时还没被用过&&第一层||前后值不重复相等||不在同一层{path.push_back(nums[i]);check[i] = true;dfs(nums);//回溯清空现场,将dfs下层插入的元素pop掉path.pop_back();check[i] = false;}}}vector<vector<int>> permuteUnique(vector<int>& nums) {//前提先排序sort(nums.begin(),nums.end());dfs(nums);return ret;}
};

在这里插入图片描述

👉🏻电话号码的字母组合

原题链接:电话号码的字母组合

mycode:

class Solution {
public:const char* numsArr[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void Combine(const string& digits,string combinestr,int i ,vector<string>& ret){if(i == digits.size())//当数字中的字母全部都进行完组合后{ret.push_back(combinestr);return;}int num = digits[i] - '0';string str = numsArr[num];for(auto ch:str){Combine(digits,combinestr+ch,i+1,ret);}}vector<string> letterCombinations(const string& digits) {vector<string> v;//存储全部组合的字符串if(digits=="")return v;string str;//这个是专门用来组合的字符串int i =0;Combine(digits,str,i,v);return v;}
};

加入恢复现场代码优化

class Solution {
public:const char* numsArr[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};vector<string> ret;string combinestr;void Combine(const string& digits,int i ){if(i == digits.size())//当数字中的字母全部都进行完组合后{ret.push_back(combinestr);return;}int num = digits[i] - '0';string str = numsArr[num];for(auto ch:str){combinestr+=ch;Combine(digits,i+1);//恢复现场combinestr.pop_back();}}vector<string> letterCombinations(const string& digits) {if(digits=="")return ret;Combine(digits,0);return ret;}
};

👉🏻括号生成

原题链接:括号生成

mycode:

class Solution {
public:vector<string> ret;string path;int left = 0,right = 0;void dfs(int n){if(left+right==2*n) {ret.push_back(path);return;}if(left<n){path.push_back('(');left++;dfs(n);path.pop_back();left--;}if(right<left){path.push_back(')');right++;dfs(n);path.pop_back();right--;}    }vector<string> generateParenthesis(int n) {dfs(n);return ret;}
};

在这里插入图片描述

👉🏻组合

原题链接:组合

mycode:

class Solution {
public:vector<vector<int>> ret;vector<int> path;int _k;void dfs(int n,int pos){if(path.size()==_k){ret.push_back(path);return;}for(int i = pos;i<=n;i++){path.push_back(i);dfs(n,i+1);//i+1是换层,n+1是在同一层里换元素//恢复现场path.pop_back();}}vector<vector<int>> combine(int n, int k) {_k = k;dfs(n,1);return ret;}
};

在这里插入图片描述

如这种左大右小的树,一般就是i+1进行深度优先遍历,如果是完全二叉树,则是n+1这种广度遍历

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

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

相关文章

音阶是音乐理论的基本概念之一

音阶是音乐理论的基本概念之一&#xff0c;它是一组按照音高顺序排列的音。不同类型的音阶有不同的音阶结构。在西方音乐中&#xff0c;最常见的是大调音阶和小调音阶。下面是这两种音阶的基本构成&#xff1a; 大调音阶&#xff08;Major Scale&#xff09;&#xff1a; 大调音…

[Python]两个杯子取水问题

利用两个杯子巧取三升水&#xff1a; 今天的这个趣味数学小游戏是利用两个没有刻度的水杯&#xff0c;巧妙地取出三升水来。 题目的条件是&#xff1a;一个总容量为6升的杯子和一个总容量为5升的杯子&#xff0c;同时面前有无限容量的水供你使用。不借助其它任何的容器&#xf…

just recode for myself 统计大模型SFT的结果与version2中text的结果bad case

问题描述&#xff1a; 利用Qwen大模型进行SFT (lora)。将生成的结果与version2版本下的中文test.txt进行bad case分析 代码实现&#xff1a; from tqdm import tqdm, trange import os import re from typing import List import json from pdb import set_trace as stoppip…

测试新字符设备驱动代码

一. 简介 上一篇文章编写了新字符设备驱动框架的代码&#xff0c;并编写了 LED灯IO初始化工作&#xff0c;也编写了Led的开与关函数。文章地址如下&#xff1a; 向新字符设备驱动代码框架中添加Led功能函数-CSDN博客 本文对所完成的新字符设备驱动代码进行测试。通过测试程…

12、高可用性

什么是高可用性 高可用性不是绝对的&#xff0c;只有相对更高的可用性。百分之百的可用性是不可能达到的。可用性的定义不仅仅包括服务正在运行的时间段&#xff0c;还包括应用是否能以足够好的性能处理请求。 导致宕机的原因 在运行环境的问题中&#xff0c;最普通的问题是…

7-1 sdut-Collection-sort--C~K的班级(II)--笔记篇

题目 经过不懈的努力&#xff0c;CXK终于当上了班主任。 现在他要统计班里学生的名单&#xff0c;但是CXK在教务系统中导出班级名单时出了问题&#xff0c;发现会有同学的信息重复&#xff0c;现在他想把重复的同学信息删掉&#xff0c;只保留一个&#xff0c; 但是工作量太大…

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样&#xff0c;因此一个好的习惯就是不同的工程都创建属于自己的环境&#xff0c;在anaconda中默认的环境是base&#xff1a; //括号中名字&#xff0c;代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

伺服电机:电子齿轮比

电子齿轮比的概念 位置控制模式下&#xff0c;输入的位置指令是对负载位移进行设定&#xff0c;而电机的位置指令是编码器单位&#xff0c;是对电机的位移进行进行设定&#xff0c;电机位置指令与输入位置指令的比例就是电子尺齿轮比。 输入的位置指令&#xff0c;所对应的位…

JVM内存区域与常见问题

内存结构 这里先以JDK1.8 hotspot垃圾收集器为例&#xff0c;讲讲每块区域存储的数据以及可能会抛的异常。 堆 存放对象实例&#xff0c;会出现内存溢出或内存泄露等情况。 栈 一次方法调用会产生一个栈帧&#xff0c;如果出现递归死循环调用栈空间满了&#xff0c;会出现…

【全网首发】洛谷贪心题解集合

贪心 1.P2240 【深基12.例1】部分背包问题 【深基12.例1】部分背包问题 - 洛谷 思路 万不要被题目给误导了&#xff0c;这道题是贪心。 所有金币都可以分开&#xff0c;也就是说只要按照性价比最高的取一定得到的价值最大。 性价比就是这堆金币的价值除以重量。 只需要把…

85双指针解三数之和

问题描述&#xff1a;给你一个包含n个整数的数组nums&#xff0c;判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。 求解思路&#xff1a;如果使用for循环的方式&#xff0c;n3的时间复杂度&#xff0c;可以采用双指针的方式&#xff0c;先将整个…

企业级大数据架构设计

企业级大数据架构设计 企业级大数据架构设计 又名&#xff1a; 学习大数据概念&#xff0c; 写框架&#xff08;第1天&#xff09; 数据架构与设计&#xff1a;概述与设计考虑 引言数据架构概述设计考虑因素构建数据架构的步骤 大数据的核心架构内容&#xff1a;构建高效和…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户&#xff1a; 1.使用CREATE USER语创建…

前端crypto-js 库: MD5

文章目录 什么是crypto-js安装依赖MD5 什么是crypto-js github地址: https://github.com/brix/crypto-js cryptojs文档: https://cryptojs.gitbook.io/docs/#encoders CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。 CryptoJS是一个JavaScript加密算法库&a…

免费的CISSP备考学习网站

CISSP&#xff08;Certified Information Systems Security Professional&#xff09;是一项高级的信息安全认证&#xff0c;官方认证机构是(ISC)。虽然(ISC) 提供了官方培训资料&#xff0c;但是很多学习资料都是商业性质的&#xff0c;需要付费购买。尽管如此&#xff0c;仍然…

基于Java SSM框架实现健康管理系统项目【项目源码】

基于java的SSM框架实现健康管理系统演示 JSP技术 JSP是一种跨平台的网页技术&#xff0c;最终实现网页的动态效果&#xff0c;与ASP技术类似&#xff0c;都是在HTML中混合一些程序的相关代码&#xff0c;运用语言引擎来执行代码&#xff0c;JSP能够实现与管理员的交互&#xf…

二分算法

目录 二分 数的三次方根 算法模板 二分 给定一个按照升序排列的长度为 n 的整数数组&#xff0c;以及 q 个查询。 对于每个查询&#xff0c;返回一个元素 k 的起始位置和终止位置&#xff08;位置从 00 开始计数&#xff09;。 如果数组中不存在该元素&#xff0c;则返回 -1…

pycharm配置pyrcc5外部工具

pyrcc5这是 PyQt5 中用来将资源文件&#xff08;.qrc&#xff09;转换为 Python 文件的工具。类似地&#xff0c;如果你想在 PyCharm 中配置 pyrcc5 将 .qrc 文件转换为 .py 文件的外部工具&#xff0c;你可以遵循以下步骤&#xff1a; 打开 PyCharm 的设置: 选择 File > Se…

GO语言基础笔记(九):工程实践

单元测试&#xff08;Unit Testing&#xff09; 单元测试是指对软件中的最小可测试单元进行检查和验证。在Go语言中&#xff0c;可以使用内置的testing包来进行单元测试。进行单元测试时&#xff0c;您应该关注以下几个要点&#xff1a; 测试代码的独立性&#xff1a;确保每个…