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

LeetCode——回溯篇(二)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com

目录

131. 分割回文串

93. 复原 IP 地址

78. 子集

90. 子集 II

491. 递增子序列


131. 分割回文串

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

回文串 是正着读和反着读都一样的字符串

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author light* @Description 分割回文串* @create 2023-08-28 17:07*/
public class PartitionTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);String s=input.nextLine();System.out.println(partition(s));}public static List<List<String>> res=new ArrayList<>();public static List<String> path=new ArrayList<>();public static List<List<String>> partition(String s) {backtracking(s,0);return  res;}private static void backtracking(String s, int startIndex) {//终止条件if(startIndex>=s.length()){//收获结果res.add(new ArrayList<>(path));return;}for (int i = startIndex; i <s.length() ; i++) {//判断是否回文,如果是,则加入到path中if(isPalindrome(s,startIndex,i)){String str=s.substring(startIndex,i+1);path.add(str);}else {continue;}backtracking(s,i+1);//回溯path.remove(path.size()-1);}}private static boolean isPalindrome(String s, int left, int right) {for (int i = left,j=right; i <j ; i++,j--) {if(s.charAt(i)!=s.charAt(j)){return false;}}return true;}
}

93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245""192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author light* @Description 复原IP地址* @create 2023-08-28 21:21*/
public class RestoreIpAddressesTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);String s=input.nextLine();System.out.println(restoreIpAddresses(s));}public static List<String> res=new ArrayList<>();public static List<String> restoreIpAddresses(String s) {if(s.length()>12){ //剪枝return res;}//采用StringBuilder,不用重复重复重复创建字符串StringBuilder sb=new StringBuilder(s);backtracking(sb,0,0);return res;}private static void backtracking(StringBuilder sb, int startIndex, int pointCount) {//终止条件if(pointCount==3){// 判断第四段子字符串是否合法,如果合法就放进result中if(isValid(sb,startIndex,sb.length()-1)){res.add(sb.toString());}return;}for (int i = startIndex; i < sb.length(); i++) {//判断字段是否合法if(isValid(sb,startIndex,i)){//如果合法添加"." sb.insert()方法,该方法是在索引的前面添加字符串sb.insert(i+1,".");pointCount++;//将i+2的位置作为下一个字符串的起始位置,因为多添加了一个"."backtracking(sb,i+2,pointCount);//回溯sb.deleteCharAt(i+1);pointCount--;}else {break;}}}/*判断是否合法IP段:1.每个整数位于0到255之间组成2.段位以0为开头的数字不合法3.段位里有非正整数字符不合法*/private static boolean isValid(StringBuilder sb, int start, int end) {if(start>end){return false;}//3.段位里有非正整数字符不合法for (int i = start; i <=end ; i++) {if(sb.charAt(i)<'0'||sb.charAt(i)>'9'){return false;}}//1.每个整数位于0到255之间组成int num=Integer.parseInt(sb.substring(start,end+1));if(num<0||num>255){return false;}//2.段位以0为开头的数字不合法if(sb.charAt(start)=='0'&&start!=end){return false;}return true;}}

78. 子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author light* @Description 子集** (思路:如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,* 那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!** 其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。* @create 2023-08-29 10:25*/
public class SubsetsTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);int n=input.nextInt();int[] nums=new int[n];for (int i = 0; i < n; i++) {nums[i]=input.nextInt();}System.out.println(subsets(nums));}public static List<List<Integer>> res=new ArrayList<>();public static List<Integer> path=new ArrayList<>();public static List<List<Integer>> subsets(int[] nums) {backtracking(nums,0);return res;}private static void backtracking(int[] nums, int startIndex) {res.add(new ArrayList<>(path));//收集子集,要放在终止添加的上面,否则会漏掉自己//终止条件if(startIndex>=nums.length){return;}for (int i = startIndex; i < nums.length; i++) {path.add(nums[i]);backtracking(nums,i+1);//回溯path.remove(path.size()-1);}}
}

90. 子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;/*** @author light* @Description 子集II* @create 2023-08-29 11:03*/
public class SubsetsWithDupTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);int n=input.nextInt();int[] nums=new int[n];for (int i = 0; i < n; i++) {nums[i]=input.nextInt();}System.out.println(subsetsWithDup(nums));}public static List<List<Integer>> res=new ArrayList<>();public static List<Integer> path=new ArrayList<>();public static List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);int[] used=new int[nums.length];Arrays.fill(used,0);backtracking(nums,0,used);return res;}private static void backtracking(int[] nums, int startIndex, int[] used) {res.add(new ArrayList<>(path));//终止条件if(startIndex>=nums.length){return;}for (int i = startIndex; i < nums.length; i++) {if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0){continue;}path.add(nums[i]);used[i]=1;backtracking(nums,i+1,used);//回溯path.remove(path.size()-1);used[i]=0;}}
}

491. 递增子序列

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]
import java.util.*;/*** @author light* @Description 递增子序列* @create 2023-08-29 15:01*/
public class FindSubsequencesTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);int n=input.nextInt();int[] nums=new int[n];for (int i = 0; i < n; i++) {nums[i]=input.nextInt();}System.out.println(findSubsequences(nums));}public static List<List<Integer>> res=new ArrayList<>();public static List<Integer> path=new ArrayList<>();public static List<List<Integer>> findSubsequences(int[] nums) {backtracking(nums,0);return res;}private static void backtracking(int[] nums, int startIndex) {if(path.size()>1){res.add(new ArrayList<>(path));  //注意不要加return,要收集树上的所有节点}if(startIndex>=nums.length){return;}Set<Integer> set=new HashSet<>();//记录本层元素是否重复使用for (int i = startIndex; i < nums.length; i++) {//如果队列不为空,但要添加的元素小于path中的最后一个元素---不是递增的---不满足条件//或者集合中已经含有nums[i]---本层有重复元素----不满足条件if((!path.isEmpty()&&nums[i]<path.get(path.size()-1))||set.contains(nums[i])){continue;}set.add(nums[i]); //每层都创建一个---不需要回溯path.add(nums[i]);backtracking(nums,i+1);//回溯path.remove(path.size()-1);}}
}

相关文章:

LeetCode——回溯篇(二)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 目录 131. 分割回文串 93. 复原 IP 地址 78. 子集 90. 子集 II 491. 递增子序列 131. 分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个…...

RabbitMQ工作模式-发布订阅模式

Publish/Subscribe&#xff08;发布订阅模式&#xff09; 官方文档&#xff1a; https://www.rabbitmq.com/tutorials/tutorial-three-python.html 使用fanout类型类型的交换器&#xff0c;routingKey忽略。每个消费者定义生成一个队列关绑定到同一个Exchange&#xff0c;每个…...

JDK源码解析-Object

1. Object类 所有类的基类——java.lang.Object Object 类是所有类的基类&#xff0c;当一个类没有直接继承某个类时&#xff0c;默认继承Object类Object 类属于 java.lang 包&#xff0c;此包下的所有类在使用时无需手动导入&#xff0c;系统会在程序编译期间自动导入。 思…...

pinia——添加插件——基础积累

问题&#xff1a;是否给pinia添加过插件&#xff1f;具体添加的方式是什么&#xff1f; 在pinia中&#xff0c;我们可以为仓库添加插件&#xff0c;通过添加插件能够扩展以下的内容&#xff1a; 为 store 添加新的属性 定义 store 时增加新的选项 为 store 增加新的方法 包装现…...

软件国产化之殇

今天又看到这么一个帖子讨论一款国产化软件&#xff0c;属实给我震撼到了。 对于国产化产品&#xff0c;一直主打的都是”自研“&#xff0c;难道是我对”自研“这个词的理解有误&#xff1f; 做一个产品&#xff0c;别人开源了&#xff0c;你拿过来使用&#xff0c;你可以说…...

SQLyog问题处理集合

sqlyog 问题处理 1. 错误号码:1049错误&#xff1a; 数据库命令参数参考&#xff1a;数据库命令地址 检查数据库是否存在检查创建的数据库名称 与 要进行连接的数据库名称是否一致&#xff1b; 2. 错误号码:1819错误&#xff1a; MySQL授予远程连接权限时出现&#xff1a; …...

JavaSE【继承和多态】(1)(重点:初始化、pretected封装、组合)

一、继承 继承 (inheritance) 机制 &#xff1a;是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性 的基础上进行扩展&#xff0c;增加新功能 &#xff0c;这样产生新的类&#xff0c;称 派生类 。 继承呈现了面向对象程序设计的层次结…...

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…...

CentOS8安装mysql8.0.24

一、下载mysql安装包并解压 执行以下命令&#xff1a; # 创建mysql安装目录 mkdir /usr/local/mysql # 进入mysql安装目录 cd /usr/local/mysql/ # 下载mysql-8.0.24 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz # 解压…...

Quasi-eccentricity Error Modeling and Compensation in Vision Metrology

论文&#xff1a;Quasi-eccentricity Error Modeling and Compensation in Vision Metrology 中文&#xff1a;视觉计量中准偏心误差建模与补偿 论文地址&#xff1a;Sci-Hub | Quasi-eccentricity error modeling and compensation in vision metrology. Measurement Scienc…...

ai智能电话机器人是人类的助手和朋友

一直以来&#xff0c;人工智能都是人们关注的热门话题。在以前&#xff0c;说到人工智能&#xff0c;第一想到的是“机器人”&#xff0c;随着人工智能的普及&#xff0c;AI已经渗透到我们生活的每一个角落。现在&#xff0c;说起人工智能&#xff0c;可能会想到“无人驾驶、无…...

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…...

【八股】2023秋招八股复习笔记5(计算机网络-CN)

文章目录 八股目录目录1、应用层 & HTTP一些http题HTTPS 加密原理&#xff08;问过&#xff09;HTTP/1.1 新特性HTTP/2.0 与 RPC&#xff08;问过&#xff09;GET 和 POST 比较 2、传输层 & TCPTCP三次握手 & 四次挥手&#xff08;问过&#xff09;为什么每次TCP 连…...

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容&#xff0c;Vector的内容于string非常相似&#xff0c;只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …...

企业网络安全:威胁情报解决方案

什么是威胁情报 威胁情报是网络安全的关键组成部分&#xff0c;可为潜在的恶意来源提供有价值的见解&#xff0c;这些知识可帮助组织主动识别和防止网络攻击&#xff0c;通过利用 STIX/TAXII 等威胁源&#xff0c;组织可以检测其网络中的潜在攻击&#xff0c;从而促进快速检测…...

为什么2G、3G、4G成功了,5G却?

你可能已经多年来一直听到关于闪电般的5G的炒作。虽然新的无线网络在美国仍然没有普及&#xff0c;但5G正在波士顿和西雅图到达拉斯和堪萨斯城等城市慢慢出现。随着连接速度的加快&#xff0c;用户的安全性和隐私保护将增加&#xff0c;因为无线行业试图改善3G和4G的防御。但是…...

C语言每日一练------Day(10)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;自除数 除自身以外数组的乘积 &#x1f493;博主csdn个人主页&#xff…...

发力服务业务,龙湖集团半程领跑赢在“智慧”

成立三十载&#xff0c;龙湖集团一直是房地产行业“特立独行”的存在。 一方面&#xff0c;龙湖在对外战略方面长期量入为出&#xff0c;从不背上过重的“包袱”。 不久前&#xff0c;一则消息引发市场关注&#xff1a;龙湖集团提前偿还17亿元债务&#xff0c;已基本全部还清…...

Kubernetes(七)修改 pod 网络(flannel 插件)

一、 提示 需要重启服务器 操作之前备份 k8s 中所有资源的 yaml 文件 如下是备份脚本&#xff0c;仅供参考 # 创建备份目录 test -d $3 || mkdir $3 # $1 命名空间 # $2 资源名称&#xff1a; sts deploy configMap svc 等 # $3 资源备份存放的目录名称for app in kubec…...

测试平台metersphere

metersphere可以做接口测试、UI测试、性能测试。 metersphere接口测试底层是jmeter&#xff0c;可以做API管理&#xff0c;快捷调试&#xff0c;接口用例管理&#xff0c;接口自动化场景执行一键选取用例范围&#xff0c;生成测试报告。 会用jmeter&#xff0c;metersphere会…...

能源监控项目避坑指南:为什么DLT645电表直连Modbus系统会失败?

能源监控项目避坑指南&#xff1a;为什么DLT645电表直连Modbus系统会失败&#xff1f; 在智慧能源项目的实施过程中&#xff0c;数据采集的可靠性直接关系到整个系统的运行效果。许多项目团队在遇到DLT645规约电表与Modbus系统对接时&#xff0c;往往会尝试直接连接&#xff0c…...

GCC编译选项详解与工程实践指南

GCC编译选项深度解析与工程实践指南1. 编译选项基础概念1.1 编译过程与选项作用GCC编译过程分为预处理、编译、汇编和链接四个阶段。编译选项通过控制这些阶段的行为&#xff0c;实现不同的编译目标&#xff1a;# 完整编译流程示例 gcc -E main.c -o main.i # 预处理 gcc -S…...

LVGL 7.11.0 Chart控件实战:5分钟搞定动态心率折线图(附完整代码)

LVGL 7.11.0 Chart控件实战&#xff1a;5分钟搞定动态心率折线图&#xff08;附完整代码&#xff09; 在嵌入式设备上实现流畅的数据可视化一直是开发者的痛点。LVGL作为轻量级图形库&#xff0c;其Chart控件能完美解决这一问题。本文将手把手教你用LVGL 7.11.0的Chart控件&am…...

探索:空间网格编码SpatialGridCoding在北斗导航与地理实体管理中的应用

1. 空间网格编码&#xff1a;北斗导航的"数字身份证" 想象一下&#xff0c;当你打开手机导航时&#xff0c;系统如何快速锁定你的位置并规划路线&#xff1f;这背后离不开空间网格编码技术的支持。简单来说&#xff0c;空间网格编码就像给地球表面贴满二维码&#xf…...

零基础快速入门前端DOM核心知识点详解与蓝桥杯Web赛道备考指南(可用于备赛蓝桥杯Web应用开发)

DOM&#xff08;文档对象模型&#xff09;是 HTML/XML 文档的编程接口&#xff0c;通过它可动态操作网页内容、结构与样式。本文将结合示例代码&#xff0c;系统讲解 DOM 核心知识点&#xff08;重点补充事件系统全解&#xff09;&#xff0c;并针对蓝桥杯 Web 应用开发赛道给出…...

别再死记硬背了!用Python和SymPy库5分钟可视化理解泰勒公式的逼近过程

用Python动态可视化泰勒公式&#xff1a;5行代码理解多项式逼近本质 数学公式的抽象性常常成为学习者的障碍&#xff0c;尤其是泰勒公式这种涉及无限逼近概念的内容。传统的静态图示和理论推导虽然严谨&#xff0c;却难以直观展示"以直代曲"的动态过程。本文将用Pyth…...

PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析

PlayCover如何重塑Mac游戏体验&#xff1f;社交与云服务革新玩法深度解析 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款开源的Mac iOS模拟器&#xff0c;通过深度整合Discord社交功…...

如何让微信聊天记录真正属于你:完整备份与分析终极指南

如何让微信聊天记录真正属于你&#xff1a;完整备份与分析终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

Spring Framework测试框架完整指南:从单元测试到集成测试的10个最佳实践

Spring Framework测试框架完整指南&#xff1a;从单元测试到集成测试的10个最佳实践 【免费下载链接】spring-framework spring-projects/spring-framework: 一个基于 Java 的开源应用程序框架&#xff0c;用于构建企业级 Java 应用程序。适合用于构建各种企业级 Java 应用程序…...

Cosmos-Reason1-7B企业应用案例:研发团队用它做内部技术文档逻辑校验与补全

Cosmos-Reason1-7B企业应用案例&#xff1a;研发团队用它做内部技术文档逻辑校验与补全 1. 引言&#xff1a;技术文档的“逻辑陷阱”与AI解法 想象一下这个场景&#xff1a;你所在的研发团队刚刚完成了一个新模块的开发&#xff0c;需要撰写一份详细的技术设计文档。文档洋洋…...