代码随想录算法训练营Day28 | 39. 组合总和、40.组合总和Ⅱ、131.分割回文串

目录

39. 组合总和

40.组合总和Ⅱ

131.分割回文串

39. 组合总和

题目

39. 组合总和 - 力扣(LeetCode)

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

示例3:

输入: candidates = [2], target = 1
输出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates 的所有元素 互不相同
  • 1 <= target <= 40

思路

代码随想录:39.组合总和

视频讲解:LeetCode:39.组合总和

树形结构如下:
39.组合总和

题解

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int startIndex) {if (target <= 0) {if (target == 0) {res.add(new ArrayList(path));}return;}for (int i = startIndex; i < candidates.length; i++) {//剪枝,当前元素大于剩余目标值时直接跳过if(target<candidates[i])continue;path.add(candidates[i]);backtrack(candidates, target - candidates[i], i);path.removeLast();}}
}

40.组合总和Ⅱ

题目

40. 组合总和 II - 力扣(LeetCode)

给定一个候选人编号的集合 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]
]

示例2:

输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
[1,2,2],
[5]
]

提示:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

思路

代码随想录:40.组合总和Ⅱ

视频讲解:LeetCode:40.组合总和Ⅱ

  1. 对数组进行排序
  2. 去重,在回溯过程已经使用过的元素不能再使用,如果当前元素与前一个元素相同,跳过以避免重复组合
  3. 剪枝,如果当前元素大于剩余的目标值,直接跳出循环

树形结构如下:

40.组合总和II

题解

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates);backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int startIndex) {if (target == 0) {res.add(new ArrayList(path));return;}if (target < 0)return;for (int i = startIndex; i < candidates.length; i++) {//剪枝if (candidates[i] > target)break;//去重if (i > startIndex && candidates[i] == candidates[i - 1])continue;path.add(candidates[i]);backtrack(candidates, target - candidates[i], i + 1);path.removeLast();}}
}

131.分割回文串

题目

131. 分割回文串 - 力扣(LeetCode)

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

示例1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

思路

代码随想录:131.分割回文串

视频讲解:LeetCode:131.分割回文串

树形结构:

131.分割回文串

题解

class Solution {List<List<String>> res = new ArrayList<>();List<String> path = new ArrayList<>();public List<List<String>> partition(String s) {backtrack(s, 0, res, path);return res;}void backtrack(String s, int startIndex) {if (startIndex == s.length()) {res.add(new ArrayList(path));return;}for (int i = startIndex; i < s.length(); i++) {//调用库函数,优点是代码简洁,缺点是复杂度高//String str = s.substring(startIndex, i + 1);//String reversedStr = new StringBuilder(str).reverse().toString();//if(!str.equals(reversedStr))//    continue;String str = s.substring(startIndex, i + 1);if (!isPalindrome(str))continue;path.add(str);backtrack(s, i + 1);path.removeLast();}}//判断是否回文boolean isPalindrome(String s) {int left = 0;int right = s.length() - 1;while (left < right) {if (s.charAt(left) != s.charAt(right)) {return false;}left++;right--;}return true;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

路径规划关于地图的整理

路径规划离不开地图&#xff0c;其中真实地图&#xff0c;栅格地图和RVIZ之间Grid显示之间很混乱&#xff0c;还有各个原点位置显示&#xff0c;不弄清发现map在rviz里显示老是偏的&#xff0c;专门学习记录一下。 RVIZ里Grid的全局坐标系原点&#xff0c;在默认在栅格中间&am…

软考学习笔记

学习资料&#xff1a; 数据库关系模式的范式总结_关系模式范式-CSDN博客 【范式】五大范式所解决的问题及说明_天空_新浪博客 (sina.com.cn) 求函数依赖&#xff1a; 根据函数依赖求候选码_证明存在部分依赖属于候选码-CSDN博客 关系范式&#xff1a; 1NF&#xff1a;若关…

xss-labs靶场第二关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

刷题 二叉树

面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优先遍历 class Solution { public:// 广度优先遍历int maxDepth(TreeNode* root) {if (root nullptr) return 0;queue<TreeNode*> que;que.push(root);int result 0;while (!que.empty()) {result;int num que…

看《米小圈动画汉字》轻松掌握汉字的起源、演变和应用!

在这个充满探索与发现的年纪&#xff0c;孩子刚刚从幼儿园的温暖怀抱中走出&#xff0c;踏入了小学的大门。对于每一个小学生而言&#xff0c;这不仅是一个新环境的适应&#xff0c;更是知识大门的开启。汉字&#xff0c;这一古老而美丽的文字&#xff0c;承载着丰富的文化与历…

【JAVA基础】集合类之Hash的原理及应用

近期几期内容都是围绕该体系进行知识讲解&#xff0c;以便于同学们学习Java集合篇知识能够系统化而不零散。 本文将介绍HashSet的基本概念&#xff0c;功能特点&#xff0c;使用方法&#xff0c;以及优缺点分析和应用场景案例。 一、概念 HashSet是 Java 集合框架中的一个重…

思科防火墙:ASA中Object-group在ACL中的应用

一、实验拓扑&#xff1a; 二、实验要求&#xff1a; 先定义几个小的&#xff0c;然后用大的包在一起&#xff1b;打包在一起&#xff0c;这就是所谓的嵌套&#xff0c;嵌套在编程里是很长用的东西&#xff0c;叫做Object-group&#xff1b; Object-group比较强大&#xff0c;可…

【JAVA开源】基于Vue和SpringBoot的师生共评作业管理系统

本文项目编号 T 071 &#xff0c;文末自助获取源码 \color{red}{T071&#xff0c;文末自助获取源码} T071&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

学习threejs,模拟窗户光源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制任意字体模型…

性能测试度量指标的多种收集环境

目录 一、技术环境 二、业务环境 三、操作环境 在用卷尺测量某一物体的长度时&#xff0c;长度就是该场景下的度量指标&#xff0c;我们可以用分米、米或者更精确的厘米甚至毫米来描述这个长度&#xff0c;具体取决于使用场景。 与其他形式的测量一样&#xff0c;对性能进行…

双十一购物狂欢节开始,盘点有哪些值得购买的母婴好物

随着双十一全球购物狂欢节的脚步日益临近&#xff0c;各大电商平台正紧锣密鼓地筹备一系列引人瞩目的促销活动。这一时刻不仅是全民欢腾的消费庆典&#xff0c;更是年轻父母为家庭添置高品质母婴用品的理想契机。对于追求生活品质的家庭而言&#xff0c;挑选既安全又具成本效益…

01移动零

题目链接 代码&#xff1a; class Solution {public void moveZeroes(int[] nums) {for(int cur0,dest-1;cur<nums.length;cur) {//判断nums(cur)是否为0if(nums[cur]!0) {dest;swap(cur,dest,nums);//进行交换}}}public void swap(int cur,int dest,int []array) {int te…

【2024最新】基于springboot+vue的交流互动系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

计算机网络-------重传、TCP流量控制、拥塞控制

重传、滑动窗口、流量控制、拥塞避免 重传机制 超时重传 发送方在发送数据时会启动一个定时器&#xff0c;当超过指定的时间之后&#xff0c;还没接收到接收方的ACK确认应答报文&#xff0c;就会重传该数据 快重传 当发送方收到接收方三个连续的ack之后说明发送方发送的报…

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…

第五届智能设计国际会议(ICID 2024)

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus大会时间&#xff1a;2024年10月25-27日大会地点&#xff1…

【高效转换神器】MaxToCAD插件:一键将3dMax三维模型秒变Autocad二维平面图

3dMax转CAD平面图插件MaxToCAD是一款功能强大的工具&#xff0c;它能够将3dMax中的三维模型快速转换为Autocad可识别的二维平面图。以下是对该插件的详细介绍&#xff1a; 一、功能概述 MaxToCAD插件允许用户轻松地将3dMax中的三维对象转换为CAD软件中的二维图形。这对于需要…

有限差分法 - 拉普拉斯算子 (Part 1)

Finite difference method - Laplacian part 1 — ROCm Blogs (amd.com) 2022年11月14日, Justin Chang, Rajat Arora, Thomas Gibson, Sean Miller, Ossian O’Reilly撰写。 有限差分法是一种在计算物理中常用的网格离散化方法&#xff0c;广泛应用于从地球物理&#xff08;天…

比亚迪「召回」热销车!谁担责

作为整车关键的安全件&#xff0c;底盘系统是支持行车安全与舒适的基石。相比于主、被动安全系统&#xff0c;底盘系统的故障&#xff0c;更容易直接导致事故风险的急剧上升。 9月29日&#xff0c;比亚迪发布召回公告&#xff0c;召回2023年2月4日至2023年12月26日期间生产的部…

遗传算法与深度学习实战(16)——神经网络超参数优化

遗传算法与深度学习实战&#xff08;16&#xff09;——神经网络超参数优化 0. 前言1. 深度学习基础1.1 传统机器学习1.2 深度学习 2. 神经网络超参数调整2.1 超参数调整策略2.2 超参数调整对神经网络影响 3. 超参数调整规则小结系列链接 0. 前言 我们已经学习了多种形式的进化…