代码随想录刷题随记23-回溯3

代码随想录刷题随记23-回溯3

39. 组合总和

leetcode链接
注意同一个 数字可以 无限制重复被选取
怎么体现这个可以重复取的思想很重要
解题代码:

class Solution {
public:void backtrace( vector<vector<int>>& ret,vector<int> &path,vector<int>& candidates,int target,int index,int &sum){if(sum==target){ret.push_back(path);return ;}if(sum>target)return;for(int i=index;i<candidates.size();i++) {  path.push_back(candidates[i]);sum+=candidates[i];//重用backtrace(ret, path,candidates,target, i, sum);sum-=candidates[i];path.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<vector<int>> ret;vector<int> path;int sum=0;backtrace(ret,path, candidates, target,  0, sum);return ret;}
};

40.组合总和II

leetcode链接
candidates 中的每个数字在每个组合中只能使用一次
同时因为candidite集合里面的数本来就有一样的,所以有肯能虽然取数顺寻不一致,但是结果集合相同的问题:
在这里插入图片描述

需要去重
去重的关键在于同一层不能重复,纵向上可以重复:
在这里插入图片描述
可以先对candidates进行排序,这样比较容易跳过
解题代码:

class Solution {
public:void backtrace( vector<vector<int>>& ret,vector<int>& candidates,int target,int sum,vector<int> & path,int index,vector<bool> &use){if(target==sum){ret.push_back(path);return;  }if(sum>target)return;for(int i=index;i<candidates.size();i++){  if(i>0&&candidates[i]==candidates[i-1]&&(use[i-1]==false)) continue;  path.push_back(candidates[i]);sum+=candidates[i];use[i]=true;backtrace(ret,candidates,  target,  sum, path, i+1,use);sum-=candidates[i];use[i]=false;path.pop_back();}        }vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ret;vector<int> path;int sum=0;std::sort(candidates.begin(),candidates.end());vector<bool> use(candidates.size(),false);backtrace(ret, candidates, target, sum,path, 0,use);return ret;}
};

131.分割回文串

leetcode链接

class Solution {
public:bool isstr(string str){if(str.size()==1)return true;int l=0;int r=str.size()-1;while(l<r){if(str[l]!=str[r])return false;l++;r--;}return true;}void backtrace( string s,vector<vector<string>>& ret,vector<string> &path,int curind,int lastind){if(curind==s.size()){ret.push_back(path);return;}string substring=s.substr(lastind,curind-lastind);//从当前切substring+=s[curind];if(isstr(substring)){path.push_back(substring);backtrace(s, ret, path,  curind+1, curind+1);path.pop_back();}substring.pop_back();//当前不切if(curind+1<s.size())backtrace(s, ret, path,  curind+1, lastind);}vector<vector<string>> partition(string s) {vector<vector<string>> ret;vector<string> path;backtrace(s, ret, path, 0, 0);return ret;}
};

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

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

相关文章

鸿蒙端云一体化开发--调用云函数--适合小白体制

如何实现在端侧调用云函数&#xff1f; 观看前&#xff0c;友情提示&#xff1a; 不知道《如何一键创建端云一体化模板》的小白同学&#xff0c;请看&#xff1a; 鸿蒙端云一体化开发--开发云函数--适合小白体制-CSDN博客 实现方法&#xff1a; 第一步&#xff1a;添加依赖 …

android studio 网络请求okhttp3、okgo

一、在build.gradle文件里添加 implementation com.squareup.okhttp3:okhttp:4.9.0 implementation com.squareup.okhttp3:okhttp:3.12.0 implementation com.squareup.okio:okio:1.17.4 implementation com.lzy.net:okgo:3.0.4 implementation com.alibaba:fastjson:1.2.57 i…

Linux之 USB驱动框架-usb-skeleton.c usb驱动源码分析(3)

一、usb 驱动框架图 二、 usb 设备经典驱动&#xff1a;usb-skeleton.c 驱动 路径&#xff1a; drivers/usb/usb-skeleton.c USB骨架程序可以看做一个最简单的USB设备驱动的实例&#xff0c;其分析流程大致如下&#xff1a; static struct usb_driver skel_driver { …

hot100 -- 链表(中)

不要觉得力扣核心代码模式麻烦&#xff0c;它确实比不上ACM模式舒服&#xff0c;可以自己处理输入输出 只是你对 链表 和 return 的理解不到位 &#x1f442; ▶ 屿前世 (163.com) &#x1f442; ▶ see you tomorrow (163.com) 目录 &#x1f382;两数相加 &#x1f6a9;删…

使用阿里云试用Elasticsearch学习:5. 地理位置

我们拿着纸质地图漫步城市的日子一去不返了。得益于智能手机&#xff0c;我们现在总是可以知道 自己所处的准确位置&#xff0c;也预料到网站会使用这些信息。我想知道从当前位置步行 5 分钟内可到的那些餐馆&#xff0c;对伦敦更大范围内的其他餐馆并不感兴趣。 但地理位置功…

【CAN】采样点介绍及测试方法

文章目录 1 什么是采样点2 为什么需要采样点3 采样点的计算公式4 VH6501测试原理和方法4.1 VH6501测试采样点原理4.2 VH6501测试方法 >>返回总目录<< 1 什么是采样点 采样点是节点判断信号逻辑电平的位置&#xff0c;是CAN控制器读取总线电平&#xff0c;并解释各…

Big Data and Cognitive Computing (IF=3.7) 计算机/大数据/人工智能期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机/大数据/人工智能/计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/j…

【多模态检索】Coarse-to-Fine Visual Representation

快手文本视频多模态检索论文 论文&#xff1a;Towards Efficient and Effective Text-to-Video Retrieval with Coarse-to-Fine Visual Representation Learning 链接&#xff1a;https://arxiv.org/abs/2401.00701 摘要 近些年&#xff0c;基于CLIP的text-to-video检索方法…

二维旋转变换

求点 P(x1, y1) 绕点 Q(x2, y2) 逆时针旋转 θ 得到的点的坐标 先看绕原点旋转的情况&#xff1a; 如图所示点 v 绕 原点旋转 θ 角&#xff0c;得到点v’&#xff0c;假设 v点的坐标是(x, y) &#xff0c;那么可以推导得到 v’点的坐标&#xff08;x’, y’)&#xff1a; { x …

JVM主要知识点详解

目录 1. 性能监控和调优 1.1 调优相关参数 1.2 内存泄漏排查 1.3 cpu飙⾼ 2. 内存与垃圾回收 2.1JVM的组成&#xff08;面试题&#xff09; 2.2 Java虚拟机栈的组成 2.3 本地方法栈 2.4 堆 2.5 方法区&#xff08;抽象概念&#xff09; 2.5.1 方法区和永久代以及元空…

【终于明白为啥有团队禁止使用lombok】

终于明白为啥有团队禁止使用lombok 背景我们的问题难点如何解决是什么东西&#xff1f;最后 背景 团队内部&#xff0c;idea版本不一样&#xff0c;有2021&#xff0c;有2022&#xff0c;有2023。 项目pom中lombok版本过低。 我们的问题 有用较新版本idea的同学&#xff0c;…

计算机组成原理【CO】Ch2 数据的表示和应用

文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整…