【力扣一刷】代码随想录day27(39. 组合总和、40.组合总和II、131.分割回文串)

目录

【39. 组合总和】中等题

【40.组合总和II】中等题

【131. 分割回文串】中等题


【39. 组合总和】中等题

思路:

  • 确定终止条件:sum = target时记录路径并返回。
  • 剪枝:当前节点的路径之和已经大于sum就不可能再等于sum了,结束该分支的递归
  • 确定单层递归逻辑:遍历所有子节点,遍历的关键在于遍历的同时去重,只要保证子节点从当前索引开始,就可以对无限制重复抽取的结果进行去重。

易错点:path不能直接加入res中,否则加入的是path的引用,res中已经记录的值会随着path的改变而改变,一定要复制一份再加入res

相似题目:40.组合总和II,相似点都是考虑如何去重

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();int sum = 0;public List<List<Integer>> combinationSum(int[] candidates, int target) {backtracking(candidates, 0, target);return res;}public void backtracking(int[] candidates, int start, int target){// 确定终止条件if (sum == target) {res.add(new ArrayList(path));return;}// 剪枝:当前节点的路径之和已经大于sum就不可能再等于sum了,结束该分支的递归if (sum > target) return;// 确定单层递归逻辑,遍历所有子节点(关键是要在遍历的时候去重,因为可无限制重复抽取)for (int i = start; i < candidates.length; i++){path.add(candidates[i]);sum += candidates[i];backtracking(candidates, i, target);path.remove(path.size() - 1);sum -= candidates[i];}}}
  • 时间复杂度:?
  • 空间复杂度: O(target),path记录求和的路径,如果全是最小值2的话,那么最坏情况下path长为target/2


【40.组合总和II】中等题

难点:数组candidates中同值的元素可能有多个,而且数组candidates中每个元素只能最多用一次,可能会出现重复的结果

关键:遍历的同时实现去重,先排序,然后根据当前子节点与前一个子节点的值是否相同,不相同再遍历,以实现进行去重。

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();int sum = 0; public List<List<Integer>> combinationSum2(int[] candidates, int target) {// 排序Arrays.sort(candidates);// 递归 & 回溯backtracking(candidates, 0, target);return res;}public void backtracking(int[] candidates, int start, int target){if (sum == target){res.add(new ArrayList(path));return;}// 剪枝1if (sum > target) return;// 遍历子节点for (int i = start; i < candidates.length; i++){// 剪枝2 & 去重(如果上个子节点和当前字节点的值相同,那么就不需要再遍历了,否则结果会重复)if (i > start && candidates[i - 1] == candidates[i]) continue;System.out.println(candidates[i]);path.add(candidates[i]);sum += candidates[i];backtracking(candidates, i + 1, target);path.remove(path.size() - 1);sum -= candidates[i];}}}
  • 时间复杂度: ?
  • 空间复杂度: O(n),path最长为n


【131. 分割回文串】中等题

关键:将递归&回溯想象成一棵树,关键是思考【树的子节点含义是什么?】、【当前节点包含哪些子节点?】、【如何判断路径是否符合要求?】

思路:以 s = "abaca" 为例

  • 第一层中,start = 0,即所有子节点都包含s中的第一个字符a,如果子节点对应的子串不是回文串(例如第二个子节点"ab"),那么就不符合题目要求,该分支不需要进行递归,直接遍历下一个节点即可。
  • 第二层中,start = 1, 与上面的start的关系是,第二层的start是第一层子串的结束索引/子串最后一个字符对应的索引 + 1。
  • 递归结束条件,如果当前开始的索引已经超过合法索引的最大值,则记录结果并返回。
class Solution {List<List<String>> res = new ArrayList<>();List<String> path = new ArrayList<>();public List<List<String>> partition(String s) {backtracking(s, 0);return res;}public void backtracking(String s, int start){if (start == s.length()){res.add(new ArrayList(path));return;}// 左闭右开for (int i = start + 1; i <= s.length(); i++){String subS = s.substring(start, i); // substring不包含结束索引,所以必须左闭右开// 如果当前子节点不是回文串,则继续遍历下个子节点,不记录该路径的结果if (!isPalindrome(subS)) continue;// 如果当前子节点是回文串,加入路径->继续往下递归->回溯,恢复路径path.add(subS);backtracking(s, i);path.remove(path.size() - 1);}}// 判断长度至少为1的字符串是否为回文串public boolean isPalindrome(String s){boolean judge = true;int left = 0;int right = s.length() - 1;while (left < right){if (s.charAt(left) != s.charAt(right)){judge = false;break;}left++;right--;}return judge;}
}

  • 时间复杂度: ?
  • 空间复杂度: O(n),path最长为字符串的长度n

这三题的时间复杂度很迷,感觉很难定义,弄清除了再补充。

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

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

相关文章

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

【御控物联】JavaScript JSON结构转换(8):数组To数组——多层属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

Java

1.学生和老师都会有work方法&#xff0c;学生的工作是学习&#xff0c;老师的工作是教书&#xff0c;我利用了一个接口来实现&#xff1b; 2.同时&#xff0c;老师和学生都是人&#xff0c;并且都有姓名&#xff0c;姓名&#xff0c;年龄和身高等特征&#xff0c;我用了一个继承…

http协议补充

7.7实现http请求 class httprequest { public:void Deserialize(std::string content){while (true){auto pos content.find(sep);if (pos std::string::npos){break;}std::string temp content.substr(0, pos);if (temp.empty()){break;}req_header_.push_back(temp);cont…

轮播卡片切换实现

背景 如上图&#xff0c;实现一个轮播卡片能力&#xff0c;支持手动滑动&#xff0c;手动拖动&#xff0c;已经点击两端切换按钮。 实现 <template><div class"top-menu"><!-- Swiper --><div v-if"headerMenuList.length > 9" c…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

蓝桥杯单片机速成4-温度传感器DS18B20

目录 一、电路图 二、底层驱动代码 三、温度读取实现 四、实际使用 一、电路图 二、底层驱动代码 时序是单总线 我们需要修改的地方是单总线内部延时函数&#xff0c;改成 void Delay_OneWire(unsigned int t) { t*12; while(t--); } #ifndef __ONEWIRE_H #defi…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

动态规划刷题(算法竞赛、蓝桥杯)--合唱队形(线性DP)

1、题目链接&#xff1a;[NOIP2004 提高组] 合唱队形 - 洛谷 #include <bits/stdc.h> using namespace std; int n,ans; int a[105],f[105][2];//f[i][2]中2表示正反两个方向int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}//正方向求最长上升子序列 a[…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…

基于Java的车辆出入校预约管理系统设计与实现(论文+源码)_kaic

摘 要 二十一世纪以来我国科技水平得到很大提升&#xff0c;人们对于生活的美好向往更加强烈&#xff0c;而目前的车辆出入校预约管理由于存在管理不规范等缺点&#xff0c;严重影响了校园的安全&#xff0c;因此&#xff0c;需要设计一个车辆出入校预约管理系统对人们出入校园…

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等 功能包含: 成语大全 二十四节气 英语单词 古诗词 近反义词 词语造句 汉语字典 英文缩写 百家姓 范文文库 文件目录:1个数据库 1个系统源码 1个伪静态规则 安装方式:把1.2G的…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

T1 神奇苹果桶 (25分) - 小米前端笔试编程题解

考试平台&#xff1a; 赛码 题目类型&#xff1a; 20道选择 2道编程题 考试时间&#xff1a; 2024-03-23 &#xff08;两小时&#xff09; 题目描述 小希在森林冒险的时候发现一个神奇的木桶&#xff0c;某些时会凭空出现一些苹果&#xff0c;小希很解地大家分享了这一个神奇…

CCIE-01-VLAN-Trunk

目录 实验条件网络拓朴逻辑拓扑物理拓扑实验目的 开始配置配置SW1配置SW2检验证配置结果 实验条件 网络拓朴 逻辑拓扑 物理拓扑 实验目的 SW1和SW2之间的E2/0-3配置为trunk&#xff0c;使用802.1q协议&#xff0c;不需要配置捆绑根据逻辑图和物理图标识&#xff0c;使得R1~R7…

蓝桥杯(更新中)

递归与递推 递归 1.指数型枚举 解析&#xff1a;从 1 ∼ n 这 n 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 思路&#xff1a;枚举每一位对应的数字选与不选&#xff0c;例如&#xff1a;第一位对应的数字为1&#xff0c;有一种方案是选1&#xff0c;另…