代码随想录算法训练营第二十六天|39 组合总和、40 组合总和||、131 分割回文串

39 组合总和

题目链接:组合总和

思路

这道题目和之前做的组合题目相比,就是它可以包含数组中相同的元素(也就是一个元素可以选择多次)。另外一点就是,这道题目要注意回溯函数的终止条件,否则会无限回溯。

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtracking(vector<int>& nums, int target, int startIndex){if(target < 0){return;}if(target == 0){res.push_back(path);return;}for(int i=startIndex; i<nums.size(); i++){path.push_back(nums[i]);target = target - nums[i];backtracking(nums, target, i);target = target + nums[i];path.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {backtracking(candidates, target, 0);return res;}
};

40 组合总和||

题目链接:组合总和||

思路

这道题目和上道题目相比,给我们的数组中是有重复元素的,那么求出来的组合也有可能是重复的,同时题目要求不能有重复组合。所以关键点就在于如何去重

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtracking(vector<int>& nums, int target, int startIndex, vector<bool>used){if(target < 0){return;}if(target == 0){res.push_back(path);return;}for(int i=startIndex; i<nums.size(); i++){if(i>0 && nums[i]==nums[i-1] && used[i-1] == false){continue;}path.push_back(nums[i]);target -= nums[i];used[i] = true;backtracking(nums, target, i+1, used);target += nums[i];used[i] = false;path.pop_back();}}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<bool> used(candidates.size(), false);sort(candidates.begin(), candidates.end());backtracking(candidates, target, 0, used);return res;}
};

这里还是使用了一个used数组来进行去重,但是很关键的一步是先要对原始的数组进行排序,排完序才可以使用used来记录状态。

26 删除有序数组中的重复项

题目链接:删除有序数组中的重复项

思路

看见上一道要去重的题目,我就想到如何对数组进行去重呢?先给出一种双指针的方法。

class Solution {
public:int removeDuplicates(vector<int>& nums) {unordered_set<int> set;int slow = 0;for(int fast=0; fast<nums.size(); fast++){if(set.find(nums[fast]) != set.end()){continue;}else{set.insert(nums[fast]);nums[slow++] = nums[fast];}}return slow;}
};

这道题目还有一个注意点是:数组是有序的,那么有序如何利用起来呢?有序的数组意味着后面的元素绝对不可能和前面已经确认的元素相等。那么我们就不用set这个数据结构。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int slow = 0;for(int fast=1; fast<nums.size(); fast++){if(nums[fast]!=nums[slow]){slow++;nums[slow] = nums[fast];}}return slow+1;}
};

131 分割回文串

题目链接:分割回文串

思路

这道题目初次看,感觉还是挺难的。参考解析发现,它把分割问题变为了组合问题,如果是回文串,则第一次分割出的字符就是回文串,第二次、第三次也是,直到分割完毕。如果第一次分割出来的就不是,那么后面肯定也不是。

class Solution {
public:vector<vector<string>> res;vector<string> path;bool isPalindrome(const string&s, int start, int end){for(int i=start, j=end; i<j; i++,j--){if(s[i] != s[j]){return false;}}return true;}void backtracking(string s, int startIndex){for(int i=startIndex; i<s.size(); i++){if(isPalindrome(s, startIndex, i)){string str = s.substr(startIndex, i-startIndex+1);path.push_back(str);}else{continue;}backtracking(s, i+1);path.pop_back();}}vector<vector<string>> partition(string s) {backtracking(s, 0);return res;}
};

参考链接

  1. https://programmercarl.com/0131.%E5%88%86%E5%89%B2%E5%9B%9E%E6%96%87%E4%B8%B2.html#%E6%80%9D%E8%B7%AF

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

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

相关文章

day35 柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球

题目1&#xff1a;860 柠檬水找零 题目链接&#xff1a;860 柠檬水找零 题意 一杯柠檬水5美元&#xff0c;每位顾客只买一杯柠檬水&#xff0c;支付5美玉&#xff0c;10美元&#xff0c;20美元&#xff0c;必须正确找零 开始时并没有零钱 若可以正确找零&#xff0c;则返回…

C#使用RabbitMQ-5_主题模式(主题交换机)

简介 主题模式允许发送者根据主题发布消息&#xff0c;而订阅者可以订阅特定的主题。 在主题模式中&#xff0c;生产者发送的消息被发送到一个交换机&#xff08;Exchange&#xff09;&#xff0c;该交换机根据消息的路由键&#xff08;Routing Key&#xff09;和绑定&#x…

Linux系统安全①iptables防火墙

目录 一.iptables防火墙概述 1.netfilter与iptables &#xff08;1&#xff09;netfilter &#xff08;2&#xff09;iptables 2.iptables防火墙默认规则表、链结构 二.iptables四表五链 1.四表 2.五链 3.总结 三.iptables的配置 1.安装 2.配置方法 &#xff08;1…

介绍一个关于 JSON 可视化的网站

最近在看到一个比较好玩的网站&#xff0c;可以将 JSON以可视化的方式展现出现&#xff0c;比如存在一下JSON数据&#xff1a; {"id": "f3bbc3bc-9f34-4bf7-8a0f-7e6f6e6fbb9a","isActive": false,"age": 25,"name": "…

【Qt5小项目】接金币小游戏

代码量在250行左右&#xff0c; 需要源码的可以私信我。

网工内推 | 网络工程师,需持有HCIE,最高16K,午餐补贴

01 科电数据 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责网络及相关安全产品和技术&#xff0c;熟悉相关主流设备&#xff08;路由器、交换机、防火墙、IPS/IDS、WAF、VPN、负载均衡、网闸&#xff09;实施维护、安全加固及优化配置技术&#xff1b; 2、负责…

docker 面试问题一

如何将Docker容器迁移到另一个主机&#xff1f; 将Docker容器从一个主机迁移到另一个主机涉及几个步骤&#xff0c;这些步骤主要围绕保存容器状态、传输数据和在新的主机上恢复状态。以下是一个详细的迁移流程&#xff1a; 1. 保存容器状态 要迁移容器&#xff0c;首先需要捕…

(N-142)基于springboot,vue停车场管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本项目分为普通用户和管理员…

[UI5 常用控件] 07.SplitApp,SplitContainer

文章目录 前言1. SplitApp1.1 组件结构1.2 Demo1.3 mode属性 2. SplitContainer 前言 本章节记录常用控件SplitApp&#xff0c;SplitContainer。主要功能是在左侧显示Master页面&#xff0c;右侧显示Detail页面。 Master页面和Detail页面可以由多个Page组成&#xff0c;并支持…

前端工程化之:webpack3-1(css工程化概述)

目录 一、css的问题 1.类名冲突的问题 2.重复样式 3.css文件细分问题 4.如何解决 &#xff08;1&#xff09;解决类名冲突 ① 命名约定 ② css in js ③ css module &#xff08;2&#xff09; 解决重复样式的问题 ① css in js ② 预编译器 &#xff08;3…

流浪动物救助|基于Springboot的流浪动物救助平台设计与实现(源码+数据库+文档)

流浪动物救助平台目录 目录 基于Springboot的流浪动物救助平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、动物信息管理 3、商品评论管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设…

编程笔记 html5cssjs 074 Javascript 运算符

编程笔记 html5&css&js 074 Javascript 运算符 一、Javascript运算符1. 算术运算符2. 赋值运算符3. 一元运算符4. 位运算符5. 关系和比较运算符6. 逻辑运算符7. 条件(三元)运算符8. 属性访问和调用运算符9. 删除、new 和 typeof 运算符 二、Javascript运算符的特点小结…

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…

postgreSQL之继承

官网地址&#xff1a;http://www.postgres.cn/docs/11/tutorial-inheritance.html 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 3.6. 继承 继承是面向对象数据库中的概念。它展示了数据库设计的新的可能性。 …

【axios报错异常】: Uncaught ReferenceError: axios is not defined

问题描述: 当前代码在vivo手机和小米手机运行是正常的,点击分享按钮调出相关弹框,发送接口进行分享,但是现在oppo手机出现了问题: 点击分享按钮没有反应. 问题解析: 安卓同事经过查询后,发现打印了错误: 但是不清楚这个问题是安卓端造成的还是前端造成的,大家都不清楚. 问题…

C语言递归与迭代并举:双重视角下的C语言阶乘计算实现

引言 计算一个正整数的阶乘是常见的数学问题。阶乘的定义为&#xff1a;n的阶乘&#xff08;记作n!&#xff09;是所有小于及等于n的正整数的乘积。例如&#xff0c;5的阶乘&#xff08;5!&#xff09;就是54321120。下面我们将通过一个使用递归方法实现阶乘的C语言代码示例&am…

行测试题答案?分享六个搜题直接出答案的软件 #学习方法#微信

下面&#xff0c;我将为您介绍几款备受大学生欢迎的搜题软件&#xff0c;希望能够帮助您更好地完成学业和提升学习效果。 1.三羊搜题 这是一个公众号 支持大学生网课和各类专业题目答案搜索&#xff0c;这也是一个老公众号了&#xff0c;我身边的很多朋友都在用。 下方附上一…

MongoDB的操作和理解

什么是MongoDB? MongoDB&#xff1a;基于分布式文件存储的数据库由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 Mo…

2024年第四届能源与环境工程国际会议(CoEEE 2024) | Ei Scopus检索

会议简介 Brief Introduction 2024年第四届能源与环境工程国际会议(CoEEE 2024) 会议时间&#xff1a;2024年5月22日-24日 召开地点&#xff1a;意大利米兰 大会官网&#xff1a;www.coeee.org CoEEE 2024将围绕“能源与环境工程”的最新研究领域而展开&#xff0c;为研究人员、…

谷粒商城【成神路】-【5】——品牌管理【上】

目录 &#x1f9c8;1.新建品牌分类 &#x1f95e;2.导入前端代码 &#x1f9c2;3.页面优化 &#x1f953;4.阿里云开通oss &#x1f32d;5.文件上传 &#x1f95a;6.表单后端校验 JSR303 1.新建品牌分类 在renren-fast客户端中&#xff0c;创建二级菜单&#xff0c;…