【LeetCode】day23:39 - 组合总和, 40 - 组合总和II, 131 - 分割回文串

LeetCode 代码随想录跟练 Day23

  • 39.组合总和
  • 40.组合总和II
  • 131.分割回文串

39.组合总和

题目描述:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。

和216.组合总和思路类似,参数添加start和sum分别记录起始索引位置和总和,不同的是在for循环递归时调用的是当前位置(start = i)而非i+1(因为同一个数字可以被重复选取)。代码如下:

class Solution {
private:vector<vector<int>> _res;vector<int> _path;void backtrack(vector<int>& candidates, int start, int sum, int target) {if (sum == target) {_res.push_back(_path);return;}for (int i = start; i < candidates.size(); ++i) {if (sum + candidates[i] > target) continue;_path.push_back(candidates[i]);backtrack(candidates, i, sum + candidates[i], target);_path.pop_back();}}public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {backtrack(candidates, 0, 0, target);return _res;}
};

40.组合总和II

题目描述:

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合。
示例 1:
输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

思路同上不再赘述,由于编号集合中每个数字出现的次数不保证唯一,所以需要添加对结果的去重操作,比如示例1中只能出现1 2 5或2 1 5。若candidates为乱序,则需要先获取所有可能情况后再根据path中的元素进行去重操作,实现比较复杂,因此先对candidates进行排序。
排序之后对于每次迭代的当前层,判断当前元素是否为重复(candidates[i] == candidates[i - 1])并跳过重复元素;同时由于不同索引数字可能相同,为防止结果遗漏,只在每一层的起始位置选择而其他位置跳过。这样既防止了结果遗漏又避免了在同一层选择相同元素导致的重复。

class Solution {
private:vector<vector<int>> _res;vector<int> _path;void backtrack(vector<int>& candidates, int start, int sum, int target) {if (sum == target) {_res.push_back(_path);return;}for (int i = start; i < candidates.size(); ++i) {if (candidates[i] + sum > target) return;if (i > start && candidates[i] == candidates[i - 1]) continue;_path.push_back(candidates[i]);backtrack(candidates, i + 1, sum + candidates[i], target);_path.pop_back();}}public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {sort(candidates.begin(), candidates.end());backtrack(candidates, 0, 0, target);return _res;}
};

131.分割回文串

题目描述:

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

最直观的思路就是列举字符串分割的所有可能情况,所有分割之后使所有子串均为回文串的结果即为输出。从实现上使用回溯法,定义start表示当前子串的起始索引,以字符串末尾作为结束条件。对回文串的判断和剪枝在每一层中完成,若从起始索引到当前位置的子串为回文串则继续,否则跳过当前情况。代码如下:

class Solution {
private:vector<vector<string>> _res;vector<string> _path;bool isPalindrome(string& s, int left, int right) {while (left < right) {if (s[left++] != s[right--]) {return false;}}return true;}void backtrack(string& s, int index) {if (index == s.length()) {_res.push_back(_path);return;}for (int i = index; i < s.length(); ++i) {if (!isPalindrome(s, index, i)) {continue;}_path.push_back(s.substr(index, i - index + 1));backtrack(s, i + 1);_path.pop_back();}}public:vector<vector<string>> partition(string s) {backtrack(s, 0);return _res;}
};

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

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

相关文章

穿越多元宇宙的.NET:一场跨平台的星际旅行

概述 在软件开发的浩瀚宇宙中&#xff0c;.NET无疑是一颗耀眼的恒星&#xff0c;散发着多平台开发的光芒。从单一的.NET Framework出发&#xff0c;我们如今已拥有一个多元化的.NET宇宙&#xff0c;每个变体都是一个独特的星球&#xff0c;拥有自己的生态系统和生存法则。本文将…

【算法专题】双指针算法之18. 四数之和(力扣)

欢迎来到 CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;双指针算法之18. 四数之和&#xff08;力扣&#xff09; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算…

ProxmoxPVE虚拟化平台--U盘挂载、硬盘直通

界面说明 ### 网络设置 ISO镜像文件 虚拟机中使用到的磁盘 挂载USB设备 这个操作比较简单&#xff0c;不涉及命令 选中需要到的虚拟机&#xff0c;然后选择&#xff1a; 添加->USB设置选择使用USB端口&#xff1a;选择对应的U盘即可 硬盘直通 通常情况下我们需要将原有…

【Linux 16】进程间通信的方式 - 共享内存

文章目录 &#x1f308; 一、共享内存概述⭐ 1. 什么是共享内存⭐ 2. 如何实现共享内存⭐ 3. 操作系统允许存在多个共享内存⭐ 4. 操作系统如何管理共享内存⭐ 5. 获取共享内存的唯一标识符 key⭐ 6. 为什么要由用户提供 key &#x1f308; 二、查看共享内存⭐ 1. 使用 ipcs -m…

TCP 协议的 time_wait 超时时间

优质博文&#xff1a;IT-BLOG-CN 灵感来源 Time_Wait 产生的时机 TCP四次挥手的流程 如上所知&#xff1a;客户端在收到服务端第三次FIN挥手后&#xff0c;就会进入TIME_WAIT状态&#xff0c;开启时长为2MSL的定时器。 【1】MSL是Maximum Segment Lifetime报文最大生存时间…

root 用户和权限

目录 1. 超级管理员 root 2. 切换用户 Switch User 2.1 普通用户切换到 root 用户 2.2 root 用户切换到普通用户 3. sudo 命令 3.1 配置认证 无论是 Windows&#xff0c;MacOS&#xff0c;Linux 均采用多用户的管理模式管理权限&#xff1b; 1. 超级管理员 root 在 Li…

揭秘嵌入式系统设计:面试官常问的10个问题

面试官常问的问题 1 如何选择合适的微控制器&#xff1f; 问题背景&#xff1a; 微控制器是嵌入式系统的核心&#xff0c;选择合适的微控制器对整个系统的性能至关重要。 回答示例&#xff1a; 选择合适的微控制器需要考虑以下因素&#xff1a; 处理能力&#xff1a;根据系…

2年社招冲击字节,一天三面斩获offer

在工作满两年的时间选择了求变&#xff0c;带着运气和实力以社招身份重新看今天的互联网环境&#xff0c;从结果看还是复合预期的。 整个面试的流程还挺快的。周中让招聘专员给投递了简历。问什么时候面试&#xff0c;申请了一个周日&#xff0c;直接安排三面。下周周中就开启…

C#中的wpf基础

在WPF中&#xff0c;Grid 是一种非常强大的布局控件&#xff0c;用于创建网格布局。它允许你将界面划分为行和列&#xff0c;并将控件放置在这些行和列中。 以下是一些关键点和示例&#xff0c;帮助你理解 WPF 中的 Grid&#xff1a; 基本属性 RowDefinitions&#xff1a;定义…

[MIT6.5840]MapReduce

MapReduce Lab 地址 https://pdos.csail.mit.edu/6.824/labs/lab-mr.html 论文地址 https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf 工作原理 简单来讲&#xff0c;MapReduce是一种分布式框架&#xff0c;可以用来处理…

windows 安装docker桌面版

下载 下载两个&#xff1a; git桌面版 docker desktop 启动docker 执行安装文件&#xff0c;启动 更新wsl2 假如报错&#xff0c;会提示失败原因。 win10会提示跳转到&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-l…

MySQL 事务与 MQ消息发送一致性

Transactional 事务中发送MQ消息&#xff0c;事务未提交但消息已经发送&#xff0c;会造成一些问题&#xff1a; 消息已发送&#xff0c;事务未提交&#xff0c;其他服务消费消息时回查数据库并未发现记录消息已发送&#xff0c;后面事务被回滚&#xff0c;但其他服务却已经收…

从0到1,AI我来了- (4)AI图片识别的理论知识-II

上篇文章&#xff0c;我们理解了我们程序的神经网络设计&#xff0c;这篇我们继续&#xff0c;把训练迭代过程分析一下&#xff0c;完成这两篇文章&#xff0c;下面问题&#xff0c;应该能回答了。 一张图片&#xff0c;如何被计算机读懂&#xff1f;pytorch 封装的网络&#…

MATLAB禁忌蚁群算法求解充电电动车辆路径规划EVRP代码实例

MATLAB禁忌蚁群算法求解充电电动车辆路径规划EVRP代码实例 MATLAB禁忌蚁群算法求解充电电动车辆路径规划EVRP代码实例

DP 整数拆分不同的二叉搜索树 DAY21

整数拆分&#xff1f; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输…

全国区块链职业技能大赛样题第9套前端源码

后端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746050 前端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746216 智能合约+数据库表设计:https://blog.csdn.net/Qhx20040819/article/details/140746646 登录 ​ 用户管理

Unity Playables:下一代动画与音频序列

Unity的Playables API是一种灵活的系统&#xff0c;用于创建和控制动画、音频以及其他形式的连续媒体序列。它为开发者提供了一种全新的方法来处理游戏中的时间序列&#xff0c;包括动画、音频、特效等。本文将探讨Playables的基本概念、如何使用Playables API实现动画&#xf…

又一成就,Pencils Protocol单链 TVL 突破 3 亿美元

Pencils Protocol 是 Scroll 生态的原生项目&#xff0c;该项目以一站式收益聚合器和拍卖平台作为主要定位&#xff0c;在功能上&#xff0c;其集 Launchpad、资产统一聚合和分发、杠杆收益等功能于一体&#xff0c;旨在最大化用户的资产利用率。近日&#xff0c;Pencils Proto…

利用python自动化运维i脚本实现远程连接服务器并实现相应命令

目录 前言&#xff1a; 一.调用的python库介绍 二.在主机上安装好相应的库 2.1激活虚拟环境 三.代码实现以及解析 四.效果的实现 五.致谢 前言&#xff1a; 在当今快速发展的技术环境中&#xff0c;自动化运维已成为 IT 基础设施管理的关键组成部分。它不仅可以显著提…

大学生算法高等数学学习平台设计方案 (第一版)

目录 目标用户群体的精准定位 初阶探索者 进阶学习者 资深研究者 功能需求的深度拓展 个性化学习路径定制 概念图谱构建 公式推导展示 交互式问题解决系统 新功能和创新点的引入 虚拟教室环境 数学建模工具集成 算法可视化平台 学术论文资源库 技术实现的前瞻性…