力扣爆刷第124天之回溯五连刷

力扣爆刷第124天之回溯五连刷(分割回文、复原IP、子集)

文章目录

      • 力扣爆刷第124天之回溯五连刷(分割回文、复原IP、子集)
      • 一、131. 分割回文串
      • 二、93. 复原 IP 地址
      • 三、78. 子集
      • 四、90. 子集 II
      • 五、91. 非递减子序列

一、131. 分割回文串

题目链接:https://leetcode.cn/problems/palindrome-partitioning/description/
思路:常规组合题,需要起始位置,然后只需要在向下递归的时候判断一下是否是回文,是回文就递归不是就不递归。

class Solution {List<List<String>> resList = new ArrayList<>();List<String> list = new ArrayList<>();public List<List<String>> partition(String s) {backTracking(s, 0);return resList;}void backTracking(String s, int index) {if(index == s.length()) {resList.add(new ArrayList(list));return ;}for(int i = index; i < s.length(); i++) {if(isTrue(s, index, i)) {list.add(s.substring(index, i+1));backTracking(s, i+1);list.remove(list.size()-1);}}}boolean isTrue(String s, int x, int y) {while(x < y) {if(s.charAt(x) != s.charAt(y)) {return false;}x++;y--;}return true;}
}

二、93. 复原 IP 地址

题目链接:https://leetcode.cn/problems/restore-ip-addresses/description/
思路:也是典型的组合问题,和上一题类似,都需要在向下递归的时候进行元素是否需要收集的判断,需要的话才递归。

class Solution {List<String> resList = new ArrayList<>();List<String> list = new ArrayList<>();public List<String> restoreIpAddresses(String s) {backTracking(s, 0);return resList;}void backTracking(String s, int index) {if(list.size() == 4) {if(index == s.length()) {resList.add(String.join(".", list));}return ;}for(int i = index; i < s.length(); i++) {if(list.size() == 3 && i - index > 2) return;String str = isTrue(s, index, i);if(str != null) {list.add(str);backTracking(s, i+1);list.remove(list.size()-1);}}}String isTrue(String s, int x, int y) {if(y - x > 2) return null;if(y - x >= 1 && s.charAt(x) == '0') return null;String ss = s.substring(x, y+1);Integer i = Integer.valueOf(ss);if(i >= 0 && i <= 255) return ss;return null;}
}

三、78. 子集

题目链接:https://leetcode.cn/problems/subsets/description/
思路:常规组合,元素无重,只不过收集节点时,需要收集全部节点,包括非叶子节点和叶子节点。

class Solution {List<List<Integer>> resList = new ArrayList<>();List<Integer> list = new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {backTracking(nums, 0);return resList;}void backTracking(int[] nums, int start) {resList.add(new ArrayList(list));for(int i = start; i < nums.length; i++) {list.add(nums[i]);backTracking(nums, i+1);list.remove(list.size()-1);}}}

四、90. 子集 II

题目链接:https://leetcode.cn/problems/subsets-ii/description/
思路:和上一题类似,不同的地方是集合有重复元素,但好消息是可以排序,这样就可以横向去重,利用相邻元素相同。
相同的地方就是都是全部节点收集。

class Solution {List<List<Integer>> resList = new ArrayList<>();List<Integer> list = new ArrayList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);backTracking(nums, 0);return resList;}void backTracking(int[] nums, int start) {resList.add(new ArrayList(list));for(int i = start; i < nums.length; i++) {if(i > start && nums[i] == nums[i-1]) continue;list.add(nums[i]);backTracking(nums, i+1);list.remove(list.size()-1);}}
}

五、91. 非递减子序列

题目链接:https://leetcode.cn/problems/non-decreasing-subsequences/description/
思路:求非递减子序列,不能排序,集合有重复元素,要达到横向去重,需要使用set,每次递归向下都是一个新的set,横向for循环是同一个。

class Solution {List<List<Integer>> resList = new ArrayList<>();List<Integer> list = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {backTracking(nums, 0);return resList;}void backTracking(int[] nums, int start) {if(list.size() > 1) {resList.add(new ArrayList(list));}Set<Integer> set = new HashSet<>();for(int i = start; i < nums.length; i++) {if(list.size() > 0 && nums[i] < list.get(list.size()-1)) continue;if(set.contains(nums[i])) continue;set.add(nums[i]);list.add(nums[i]);backTracking(nums, i+1);list.remove(list.size()-1); }}
}

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

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

相关文章

稀碎从零算法笔记Day56-LeetCode:组合总和 Ⅳ

题型&#xff1a;DP、数组 链接&#xff1a;377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的…

【算法刷题day30】Leetcode:332. 重新安排行程、51. N 皇后、37. 解数独

文章目录 Leetcode 332. 重新安排行程解题思路代码总结 Leetcode 51. N 皇后解题思路代码总结 Leetcode 37. 解数独解题思路代码总结 草稿图网站 java的Deque Leetcode 332. 重新安排行程 题目&#xff1a;332. 重新安排行程 解析&#xff1a;代码随想录解析 解题思路 代码 /…

代码随想录算法训练营第四十一天| 343.整数拆分、96.不同的二叉搜索树

系列文章目录 目录 系列文章目录343. 整数拆分动态规划 96.不同的二叉搜索树动态规划 343. 整数拆分 动态规划 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]表示分拆数字i&#xff0c;可以得到的最大乘积为dp[i]。确…

盲人出行挑战与曙光:“盲人视觉辅助技术研发”助力无障碍生活

作为一名资深记者&#xff0c;我深感盲人朋友们在日常出行中面临的种种困难。然而&#xff0c;在科技日新月异的今天&#xff0c;一项名为蝙蝠避障的专为盲人视觉辅助技术研发的领域正在以前沿科技成果&#xff0c;为改善盲人出行困境带来希望之光。本文将深入探讨这一技术如何…

力扣刷题4.22

88. 合并两个有序数组 解题思路&#xff1a; 双指针加单指针 同时从后往前遍历原始的nums1和2&#xff0c;比较大小&#xff0c;大的往后站。 class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not ret…

FastGPT+ChatGLM3本地部署

FastGPTChatGLM本地部署 本地部署硬性要求&#xff1a;显存13g以上 关于环境的安装就不多赘述&#xff0c;conda pip 可以解决大部分问题 ChatGLM本地运行 m3e-basechatglm3-6b 在huggingface上可以下载上述模型&#xff0c;如果没有梯子可以使用huggingface镜像 从git…

【C++刷题】优选算法——动态规划第五辑

最长公共子序列 状态表示:选取第一个字符串[0,i]区间和第二个字符串[0,j]区间作为研究对象dp[i][j]: 表示s1的[0,i]区间和s2的[0,j]区间内的所有子序列中&#xff0c;最长公共子序列的长度 状态转移方程:text1[i] text2[j]:dp[i][j] dp[i-1][j-1] 1;text1[i] ! text2[j]:dp…

【进程地址空间】地址空间理解存在原因 | 深入理解页表写时拷贝虚拟地址

目录 地址空间深入理解 划分区域 理解地址空间 地址空间存在的意义 意义1 意义2 意义3 理解页表和写时拷贝 页表 写时拷贝 OS识别错误 理解虚拟地址 fork解释 上篇我们简单的学习了进程地址空间/页表/物理地址/虚拟地址/写时拷贝等概念。本篇深入理解下。 地址空…

算法训练营day20

一、最大二叉树 class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {//记录最大值的索引&#xff0c;左侧是左子树&#xff0c;右侧是右子树&#xff1b;//然后记录左子树的起始和终止索引,也记录右子树的起始和终止的索引&#xff0c;然后递归//循环条…

Ubuntu系统下 Nvidia驱动 + cuda驱动 + CuDNN安装与卸载

Ubuntu系统下 Nvidia驱动 cuda驱动 CuDNN安装与卸载 一、NVIDIA驱动与CUDA驱动的区别二、NVIDIA驱动安装与卸载1. 查看系统内核版本2. 查看显卡型号3. 查看是否有显卡驱动4. 禁用nouveau并重启5. 卸载旧版本6. 安装&#xff11;&#xff1a;使用标准Ubuntu仓库进行自动化安装…

学习笔记Day21:转录组差异分析

转录组差异分析 差异分析难点在于将数据处理成需要的格式 表达矩阵 数值型矩阵-count 行名是symbol 低表达量的基因需要过滤 分组信息 因子&#xff0c;对照组在level第一位 与表达矩阵的列一一对应 项目名称 字符串&#xff08;不要有特殊字符&#xff09; TCGA-XX…

路由策略实验

一.实验拓扑图&#xff1a; 二.实验要求&#xff1a; 1.按照图示配置IP地址&#xff0c;R1,R3,R4上使用loopback口模拟业务网段 2.R1和R2运行RIPv2&#xff0c;R2&#xff0c;R3和R4运行OSPF&#xff0c;各自协议内部互通 3.在RIP和OSPF间配置双向路由引入&#xff0c;要求除R4…

PHP 函数的命名空间是否会影响执行顺序?

在 php 中&#xff0c;函数命名空间一般不会影响执行顺序。执行顺序通常由文件顺序或函数调用顺序决定。即使函数位于不同的命名空间中&#xff0c;只要它们在同一文件中&#xff0c;它们就会按照定义顺序执行。 PHP 函数命名空间是否会影响执行顺序&#xff1f; 简介 在 PHP…

pygame 烟花效果

# 初始化 pygame.init() screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption(烟花效果) # 焰火发射 particles [] # 焰火粒子 def firework(x, y): num_particles 100 # 每次发射的…

关于ResNet的假说

ResNet 最核心的思想就是 恒等映射吧 那么现在来提出几个问题&#xff1a; 为什么deeper 以后train L 会增加&#xff1f;恒等映射会解决什么问题&#xff1f;能否解决梯度非常陡峭的问题&#xff1f;你想到了什么模型有类似的问题&#xff0c;如何进行改进的&#xff1f; as…

本地环境通过ssh通道连接服务器数据库,实现本地客户端和代码可以访问数据库

使用方法&#xff1a; ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 搭建隧道的账号搭建隧道的ip 可以增加参数-v,输出更多的信息 ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 -v 搭建隧道的账号搭建隧道的ip 有时候&#xff0c;测试环境的数据库不允许…

ClickHouse 数据类型、表引擎与TTL

文章目录 数据类型表引擎1.TinyLog 引擎2.MergeTree 引擎3.ReplacingMergeTree 引擎4.AggregatingMergeTree 引擎5.SummingMergeTree 引擎6.CollapsingMergeTree 引擎7.Distributed 引擎 TTL列级 TTL表级TTL 数据类型 ClickHouse 数据类型Java 数据类型数据范围UInt8Short0 到…

【ETOJ P1023】同鱼系 题解(数学+取余)

题目描述 给定一个大小为 n n n 的数组 a a a 和一个整数 k k k。 你可以执行以下操作任意次&#xff08;0次也行&#xff09;: 选择一个下标 i i i 满足 1 ≤ i ≤ n − k 1 \leq i \leq n-k 1≤i≤n−k&#xff0c;然后交换 a i a_i ai​ 和 a i k a_{ik} aik​。…

获取肖博数学全套视频+讲义

肖博数学是一个专业团队&#xff0c;教学方法非常颠覆&#xff0c;具有很多技巧&特殊的解题方法内容&#xff0c;能使得学生在高考时冲刺高分 hello&#xff0c;今天分享一下高中数学资料&#xff0c;肖博数学&#xff0c; 他们的教学方法与传统的教学方式有所不同&#…

vue实现周日历 日历按周切换 vue日程管理

实现的功能 1、点击今天&#xff1a;回到今日日期并选中今日日期&#xff0c;查当天数据 2、点击左箭头&#xff1a;切换上一周 3、点击右箭头&#xff1a;切换下一周 4、黄圆圈代表有日程提醒&#xff0c;点击选中&#xff0c;下方对应显示当前日程提醒的内容&#xff0c;没有…