当前位置: 首页 > 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就回本啦

相关文章:

  • mysql虚拟列Generated Column
  • spring boot 实现 PDF转换图片
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)
  • maven一点通
  • pdf文件属性的删除
  • 一款基于 SpringCloud 开发的AI聊天机器人系统,已对接GPT-4.0,非常强大
  • 还原wps纯粹的编辑功能
  • Apache Doris 如何基于自增列满足高效字典编码等典型场景需求
  • tp8 mpdf 导出pdf
  • C语言经典算法-9
  • RabbitMQ介绍及搭建
  • 【Vue3】自定义Input组件
  • 后端工程师快速使用vue和Element
  • 2024年敏捷产品负责人CSPO认证培训
  • Solidity 智能合约开发 - 基础:基础语法 基础数据类型、以及用法和示例
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CentOS 7 修改主机名
  • CentOS6 编译安装 redis-3.2.3
  • CentOS从零开始部署Nodejs项目
  • ESLint简单操作
  • IDEA 插件开发入门教程
  • Objective-C 中关联引用的概念
  • Promise初体验
  • python_bomb----数据类型总结
  • QQ浏览器x5内核的兼容性问题
  • React中的“虫洞”——Context
  • Zepto.js源码学习之二
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 阿里云前端周刊 - 第 26 期
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 目录与文件属性:编写ls
  • 前端性能优化--懒加载和预加载
  • 入口文件开始,分析Vue源码实现
  • 微信小程序设置上一页数据
  • 用jquery写贪吃蛇
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 《码出高效》学习笔记与书中错误记录
  • 阿里云服务器购买完整流程
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​用户画像从0到100的构建思路
  • # .NET Framework中使用命名管道进行进程间通信
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #include到底该写在哪
  • #QT(串口助手-界面)
  • (52)只出现一次的数字III
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (windows2012共享文件夹和防火墙设置
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十)c52学习之旅-定时器实验
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)visual stdio 书签功能介绍