剑指Offer题目笔记25(使用回溯法解决其他类型问题)

面试题85:

面试题85

问题:

​ 输入一个正整数n,输出所有包含n个左括号和n个右括号的组合,要求每个组合的左括号和右括号匹配。

解决方案:

​ 使用回溯法。因为要生成n个左括号和n个右括号,故需要走2n步,每一步生成一个括号,每一步都面临两个选项,既可能生成左括号也可能生成右括号。有限制条件,第一:左括号和右括号的个数不能大于n;第二:已生成右括号的个数不能大于已生成左括号。

源代码:
class Solution {public List<String> generateParenthesis(int n) {List<String> result = new LinkedList<>();dfs(n,n,"",result);return result;}//left表示未生成左括号个数、right表示未生成右括号个数private void dfs(int left,int right,String s,List<String> result){if(left == 0 && right == 0){result.add(s);return;}if(left > 0){dfs(left-1,right,s + "(",result);}//当生成左括号的个数大于生成右括号的个数时,出现生成右括号的情况。if(left < right){dfs(left,right-1,s+")",result);}}
}

面试题86:

面试题86

问题:

​ 输入一个字符串,要求将它分割成若干子字符串,使每个子字符串都是回文。

解决方案:

​ 使用回溯法。当处理到字符串中的某个字符时,如果包括该字符在内后面还有n个字符,那么此时面临n个选项,即分割出长度为1的子字符串(只包含该字符)、分割出长度为2子字符串(即包含该字符及它后面的一个字符),以此类推,分割出长度为n的子字符串(即包含该字符在内的后面的所有字符)。由于题目要求分割出来的每个子字符串都是回文,因此需要逐一判断这n个子字符串是不是回文,只有回文子字符串才是符合条件的分割。分割出一段回文子字符串之后,接着分割后面的字符串。

源代码:
class Solution {public List<List<String>> partition(String s) {List<List<String>> result = new LinkedList<>();dfs(s,0,new LinkedList<>(),result);return result;}private void dfs(String s,int start,LinkedList<String> list,List<List<String>> result){if(start == s.length()){result.add(new LinkedList<>(list));}else{//分割出包括该字符在内后面还有n个字符,长度为1的子字符串(只包含该字符)、分割出长度为2子字符串(即包含该字符及它后面的一个字符)。for(int i = start;i < s.length();i++){if(isBack(s,start,i)){list.add(s.substring(start,i+1));//继续对分割剩余部分进行判断dfs(s,i+1,list,result);list.removeLast();}}       }}//判断从字符串str下标start到end的子字符串是否是回文字符串。private boolean isBack(String str,int start,int end){while(start < end){if(str.charAt(start++) != str.charAt(end--)){return false;}}return true;}
}

面试题87:

面试题87

问题:

​ 输入一个只包含数字的字符串,列出所有可能恢复出来的IP地址。

解决方案:

​ 使用回溯法。逐个扫描输入字符串中的字符以恢复IP地址。针对字符串中的每个数字,通常面临两个选项。第1个选项是将当前字符拼接到当前分段数字的末尾,拼接之后的数字应该在0到255之间。第2个选项是当前字符作为一个新的分段数字的开始。需要注意的是,一个IP地址最多只有4个分段数字,并且当开始一个新的分段数字时前一个分段数字不能是空的。

源代码:
class Solution {public List<String> restoreIpAddresses(String s) {List<String> result = new LinkedList<>();dfs(s,0,0,"","",result);return result;}//i用于记录已经扫描到字符串的下标、segI表示当前分段数字的下标、seg表示当前分段字符串、ip表示已经拼接好的部分IP地址private void  dfs(String s,int i,int segI,String seg,String ip,List<String> result){if(i == s.length() && segI == 3 && isValidSeg(seg)){result.add(ip + seg);//例如字符串s为10203040}else if(i < s.length() && segI <= 3){//当ch为2时,seg为10char ch = s.charAt(i);if(isValidSeg(seg + ch)){//情况一:添加当前char字符到该分段,seg字符串变为102dfs(s,i+1,segI,seg + ch,ip,result);}if(seg.length() > 0 && segI < 3){//情况二:不添加当前char字符到该分段,seg字符串变为2,IP地址为10.dfs(s,i + 1,segI + 1,"" + ch,ip + seg + ".",result);}}}//判断当前分段数字是否有效private boolean isValidSeg(String seg){return Integer.valueOf(seg) <= 255 && (seg.equals("0") || seg.charAt(0) != '0');}
}

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

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

相关文章

SD-WAN国际网络专线:高效、合规且可靠的跨境连接解决方案

在数字化时代&#xff0c;企业对跨境网络连接的需求日益增长。SD-WAN技术作为一种新兴的解决方案&#xff0c;正逐渐成为构建跨境网络连接的首选。本文将探讨SD-WAN国际网络专线的发展现状、合规性要求以及选择时需要考虑的关键因素。 SD-WAN技术&#xff1a;跨境网络连接的新…

Spring Boot介绍

Spring Boot是一个开源的Java应用框架&#xff0c;它旨在简化Spring应用的初始化和开发过程。通过提供一系列默认的配置和快捷的特性&#xff0c;Spring Boot使得开发人员能够快速地构建和运行基于Spring框架的应用程序。下面将详细介绍Spring Boot项目的各个方面。 一、Sprin…

【C++】排序算法 --快速排序与归并排序

目录 颜色分类&#xff08;数组分三块思想&#xff09;快速排序归并排序 颜色分类&#xff08;数组分三块思想&#xff09; 给定⼀个包含红⾊、⽩⾊和蓝⾊、共 n 个元素的数组 nums &#xff0c;原地对它们进⾏排序&#xff0c;使得相同颜⾊ 的元素相邻&#xff0c;并按照红⾊、…

12-项目部署_持续集成

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从…

【解读Kubernetes架构】全面指南,带你掌握Kubernetes的设计原理与构成!

了解 Kubernetes 架构&#xff1a;综合指南 前言一、什么是 Kubernetes 架构&#xff1f;1.1、控制平面1.2、工作节点 二、Kubernetes 控制平面组件2.1、kube-api服务器2.2、etcd2.3、kube-scheduler2.4、Kube 控制器管理器2.5、云控制器管理器 &#xff08;CCM&#xff09; 三…

《QT实用小工具·十四》面板容器控件和图形字体示例

1、概述 源码放在文章末尾 面板容器控件包含如下功能&#xff1a; 支持所有widget子类对象&#xff0c;自动产生滚动条。 支持自动拉伸自动填充。 提供接口获取容器内的所有对象的指针。 可设置是否自动拉伸宽度高度。 可设置设备面板之间的间距和边距。 超级图形字体类…

嵌入式软件架构演进:轮询系统、前后台系统、RTOS 架构特点和选择

嵌入式开发主要包括单片机(MCU)开发和以 ARM 为代表的嵌入式 Linux 开发。本文主要讲解单片机开发中嵌入式软件架构的演进,包括从最初的简单轮询式架构,到前后台系统,再到如今复杂多样的实时操作系统(RTOS)。对比各种嵌入式软件架构的特点和差异,并讨论学习 RTOS 的必要…

无库存,无货源,怎么做视频号小店?

大家好&#xff0c;我是电商糖果 有朋友跟糖果说&#xff0c;这视频号小店非常火&#xff0c;自己想趁着这次的风口开店赚钱。 自己无库存&#xff0c;也无货源&#xff0c;能开店卖货不&#xff1f; 糖果告诉他&#xff0c;能卖货&#xff0c;而且还可以让他不到一个月时间…

vivado 系统监控器

系统监控器 (SYSMON) 模数转换器 (ADC) 用于测量硬件器件上的裸片温度和电压。 SYSMON 可通过片上温度和供电传 感器来监控物理环境。 ADC 可为各种应用提供高精度模拟接口。 请参阅下文 &#xff0c; 以获取有关特定器件架构的更多信息 &#xff1a; • 《 UltraScale …

速通汇编(四)汇编andor、shl、shr、inc、dec、xchg、neg指令

一&#xff0c; and&#xff08;与操作&#xff09; 按位与操作符&#xff0c;将两个操作数的对应位进行与操作。 and ax, bx ; 将寄存器 AX 和 BX 中的值进行按位与操作&#xff0c;并将结果存储回寄存器 AX二&#xff0c;or&#xff08;或操作&#xff09; 按位或操作符&…

c# wpf Template ContentTemplate

1.概要 1.1 定义内容的外观 2.2 要点分析 2.代码 <Window x:Class"WpfApp2.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

电子技术学习笔记

一、半导体器件主要参数及应用 主要参数&#xff1a; 电压&#xff08;Voltage&#xff09;&#xff1a;指器件能够承受或工作的最大电压值&#xff0c;通常以伏特&#xff08;V&#xff09;为单位。 电流&#xff08;Current&#xff09;&#xff1a;指器件能够承受或工作的…

自去岁遭裁,迄今已憩半载有余……

自去岁遭裁&#xff0c;迄今已憩半载有余。初时&#xff0c;每思及空窗期之长&#xff0c;心中难免涌起自责之意&#xff0c;深恐日后求职之路坎坷。然深思熟虑后&#xff0c;方觉人生岂能无休憩之时&#xff1f;偶尔休憩&#xff0c;亦属常理&#xff0c;何必过于自责乎&#…

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

C++之函数提高(HM)

目录 1.函数默认参数&#xff08;缺省参数&#xff09; 2.占位参数 3.函数重载 4.类和对象--封装 &#xff08;1&#xff09;圆类&#xff1a; &#xff08;2&#xff09;访问权限 &#xff08;3&#xff09;struct&&class &#xff08;4&#xff09;立方体类的…

最大质因数

描述 给出 N 个数字&#xff0c;试求质因数最大的数字。 输入描述 第一行&#xff0c;一个整数 N &#xff0c;表示数字个数。接下来 N 行&#xff0c;每行一个整数 Ai&#xff0c;表示给出的数字。 输出描述 一个整数&#xff0c;表示质因数最大的数字。 N≤5000,Ai≤20…

第1讲——预备知识

一、视觉SLAM十四讲在讲些啥 SLAM&#xff1a;Simultaneous Localization and Mapping 翻译&#xff1a;同时定位与地图构建 搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己的运动。 当特定传感…

MBTI测试指南:职场新人必读的性格分析文章!

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

WWDC24定档6月 | 崩坏3将推Mac系统版 苹果AI启航 visionOS 2.0将系数登场WWDC24

这几天又有一件苹果用户圈大事发生了&#xff01;WWDC24正式定档&#xff0c;将在6月10日-14日召开&#xff0c;届时一众软件系统&#xff0c;包括iOS18&#xff0c;iPadOS&#xff0c;WatchOS&#xff0c;VisionOS等等&#xff0c;都将迎来更新。另外就是手游崩坏3官宣&#x…

有效感受野可视化学习

有效感受野可视化 过程记录创建环境准备数据、脚本脚本测试 其他参考尝试运行 过程记录 创建环境 conda create -n ERF python3.8 -y conda activate ERF pip3 install empy rospkg pyyaml catkin_pkg conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch…