当前位置: 首页 > news >正文

【代码随想录Day27】

Day 27 回溯算法03

今日任务

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

代码实现

组合总和,直接套模板可解

 public List<List<Integer>> combinationSum(int[] candidates, int target) {backtracking(candidates, target, 0);return result;}void backtracking(int[] candidates, int target, int startIndex) {if (sum == target) {result.add(new ArrayList<>(path));return;}if (sum > target) {return;}for (int i = startIndex; i < candidates.length; i++) {path.add(candidates[i]);sum+=candidates[i];backtracking(candidates, target, i);sum-=candidates[i];path.remove(path.size() - 1);}}

组合总和II
这个就有点难,在模板之外要考虑怎么去重

public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates);backtracking2(candidates, target, 0, new boolean[candidates.length]);return result;}void backtracking2(int[] candidates, int target, int startIndex, boolean[] used) {if (sum == target) {result.add(new ArrayList<>(path));return;}if (sum > target) {return;}for (int i = startIndex; i < candidates.length; i++) {if (target - sum < candidates[i]) break;if ( i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]) {continue;}used[i] = true;path.add(candidates[i]);sum+=candidates[i];backtracking2(candidates, target, i + 1, used);used[i] = false;sum-=candidates[i];path.remove(path.size() - 1);}}

131.分割回文串
这个就太难了,模板还是那个模板,这里难以想到的是,当切割字符串的时候,从第二位开始,就相当于把第1、2位切割为一个字符,也就是说把startIndex当成切割线;至于解法中的动态规划部分,则完全不懂。

    public List<List<String>> partition(String s) {List<List<String>> result = new ArrayList<>();List<String> path = new ArrayList<>();backtracking(s, 0, result, path);return result;}void backtracking(String s, Integer startIndex, List<List<String>> result, List<String> path) {if (startIndex >= s.length()) {result.add(new ArrayList<>(path));return;}for (int i = startIndex; i < s.length(); i++) {String substring = s.substring(startIndex, i + 1);if (!isPalindrome(substring)) {continue;}path.add(substring);backtracking(s, i + 1, result, path);path.remove(path.size() - 1);}}public boolean isPalindrome(String s) {for (int i = 0; i < s.length()/2; i++) {if (s.charAt(i) != s.charAt(s.length() - i - 1)) {return false;}}return true;}

今日总结

  1. 有点难,但是模板依然可用,每个题里边都有难以想象到的难点
  2. 大数据?AI?有机会吗?
  3. 今天+2,希望再来两天,2024就回本啦
http://www.lryc.cn/news/321007.html

相关文章:

  • 【一】【单片机】有关LED的实验
  • 面试算法-49-缺失的第一个正数
  • 论文笔记:液体管道泄漏综合检测与定位模型
  • 抖音视频批量提取软件|无水印视频下载
  • Linux docker1--环境及docker安装
  • uniapp使用uview - DatetimePicker 时间选择器 /时间戳转化
  • python实现websocket
  • ElasticSearch简介及常见用法
  • js iframe获取documen中的对象为空问题
  • vue3子父组件之间的调用
  • 用 二层口 实现三层口 IP 通信的一个实现方法
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • 四.流程控制(顺序,分支,循环,嵌套)
  • 了解常用开发模型 -- 瀑布模型、螺旋模型、增量与迭代、敏捷开发
  • 使用 Vue CLI 创建一个 Vue2 项目
  • Linux工具 - 耀眼的git
  • Spring Security的开发
  • C语言 实用调试技巧
  • GPT的实现细节
  • docker安装Milvus
  • HTML静态网页成品作业(HTML+CSS)——世博园介绍(2个页面)
  • 微信小程序订阅消息授权弹窗事件
  • 谷歌的后量子密码学威胁模型
  • 机器人在果园内行巡检仿真
  • 蓝桥杯算法基础(14):十大排序算法(归并排序)c语言版
  • 力扣刷题(DAY09-DAY11)
  • IPC之管道
  • VUE-组件间通信(二)$emit
  • java 程序连接 redis 集群 的时候报错 MUTLI is currently not supported in cluster mode
  • AVP-SLAM:自动泊车系统中的语义SLAM_