LeetCode算法题解(回溯)|LeetCode93. 复原 IP 地址、LeetCode78. 子集、LeetCode90. 子集 II
一、LeetCode93. 复原 IP 地址
题目链接: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 中的任何数字。你可以按 任何 顺序返回答案。
示例 1:
输入:s = "25525511135" 输出:["255.255.11.135","255.255.111.35"]
示例 2:
输入:s = "0000" 输出:["0.0.0.0"]
示例 3:
输入:s = "101023" 输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
提示:
1 <= s.length <= 20s仅由数字组成
算法分析:
利用递归纵向遍历字符串中合理的四个子串。
然后for循环遍历每个合理子串(0~255的整数,不含前导0)。
代码如下:
class Solution {List<String>result = new ArrayList<>();//用来存放所有结果int len;//字符串的长度public void backTravel(String a, int index, int count, String path) {if(count == 4) {//整数的个数等于4个时if(path.length() == len + 3) {//该组合的长度等于字符串的长度加上三个'.'的长度时,放入结果集result.add(path);}return;}for(int i = index; i < len; i++) {if(i == index && a.charAt(i) == '0') {//如果字串长度为一且为"0",0单独为一个整数if(path.length() == 0) {count++;backTravel(a, i + 1, count, path + "0");}else {count++;backTravel(a, i + 1, count, path + ".0");}}else if(i - index <= 2 && Integer.parseInt(a.substring(index, i + 1)) <= 255){//如果字串在合理的范围,递归if(path.length() == 0) backTravel(a, i + 1, count + 1, path + a.substring(index, i + 1));else backTravel(a, i + 1, count + 1, path + "." + a.substring(index, i + 1));}else break;//不在合理范围跳出循环}}public List<String> restoreIpAddresses(String s) {len = s.length();backTravel(s, 0, 0,"");return result;}
}
二、LeetCode78. 子集
题目链接:78. 子集
题目描述:
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10-10 <= nums[i] <= 10nums中的所有元素 互不相同
算法分析:
每次递归要先收集子集,以防漏掉。
然后横向遍历数组,将数组的元素依次放入路径,递归,回溯。
代码如下:
class Solution {List<List<Integer>>result = new ArrayList<>();//收集所有子集LinkedList<Integer>path = new LinkedList<>();//遍历所有子集int len;//数组长度public void backTravel(int[] nums, int index) {result.add(new LinkedList<>(path));//每次递归先收集子集,防止漏掉if(index == len) return;//终止条件for(int i = index; i < len; i++) {//横向遍历数组path.add(nums[i]);backTravel(nums, i + 1);//递归path.removeLast();//回溯}}public List<List<Integer>> subsets(int[] nums) {len = nums.length;backTravel(nums, 0);return result;}
}
三、LeetCode90. 子集 II
题目链接:90. 子集 II
题目描述:
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
示例 1:
输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10-10 <= nums[i] <= 10
算法分析:
这道题的做法跟上道题很类似,只不过为了避免重复的子集出现,我们需要先对数组进行排序,让相同的元素放在一起,然后再遍历元素的时候进行枝剪(每层递归处理到相同元素时,只处理一次,避免相同元素出现在同一位置从而出现重复)。
代码如下:
class Solution {List<List<Integer>>result = new ArrayList<>();//存放所有合理子集LinkedList<Integer>path = new LinkedList<>();//搜索所有合理子集int len;public void backTravel(int[] nums, int index) {result.add(new LinkedList<>(path));//先放子集if(index == len) return;for(int i = index; i < len; i++) {if(i > index && nums[i] == nums[i - 1]) continue;//枝剪相同元素出现在同一位置path.add(nums[i]);backTravel(nums, i + 1);path.removeLast();}}public List<List<Integer>> subsetsWithDup(int[] nums) {len = nums.length;Arrays.sort(nums);backTravel(nums, 0);return result;}
}
总结
遇到复杂的题时千万不要慌,仔细读题,一步一步来,大胆尝试。
相关文章:
LeetCode算法题解(回溯)|LeetCode93. 复原 IP 地址、LeetCode78. 子集、LeetCode90. 子集 II
一、LeetCode93. 复原 IP 地址 题目链接:93. 复原 IP 地址 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.…...
vue、react数据绑定的区别?
Vue 和 React 是两个流行的前端框架,它们在数据绑定方面有一些区别。 Vue 的数据绑定: Vue 使用双向数据绑定(two-way data binding)的概念。这意味着当数据发生变化时,视图会自动更新;同时,当…...
前端Vue 页面滑动监听 拿到滑动的坐标值
前言 前端Vue 页面滑动监听 拿到滑动的坐标值 实现 Vue2写法 mounted() {// 监听页面滚动事件window.addEventListener("scroll", this.scrolling);}, methods: { scrolling() {// 滚动条距文档顶部的距离let scrollTop window.pageYOffset ||document.documentE…...
CSS实现鼠标移至图片上显示遮罩层及文字效果
效果图: 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…...
【OpenCV实现图像:图像处理技巧之空间滤波】
文章目录 概要导入库空间过滤器模板展示效果分析与总结 概要 空间滤波器是数字图像处理中的基本工具之一。它通过在图像的每个像素位置上应用一个特定的滤波模板,根据该位置周围的相邻像素值进行加权操作,从而修改该像素的值。这种加权操作能够突出或模…...
载波通讯电表的使用年限是多久?
随着科技的飞速发展,智能家居、物联网等概念逐渐深入人心,载波通讯电表作为一种新型的智能电表,凭借其低功耗、高可靠性、远程通讯等优点,广泛应用于居民用电、工业生产等领域。那么,载波通讯电表的使用年限是多久呢&a…...
微信小程序多端应用 Donut 多端编译
目前支持 wxml、wxs、js/ts、json,less/sass 等文件类型,资源支持通过配置区分不同平台 wxml中使用 <!-- #if MP --><view class"test-view">wechat</view><!-- #elif IOS --><view class"test-view"…...
调试 Mahony 滤波算法的思考 10
调试 Mahony 滤波算法的思考 1. 说在前面的2.Mahony滤波算法的核心思想3. 易懂的理解 Mahony 滤波算法的过程4. 其他的一些思考5. 民间 9轴评估板 1. 说在前面的 之前调试基于QMI8658 6轴姿态解算的时候,我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让…...
Bean——IOC(Github上有代码)
源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中,需要用到Json的消息转换器,这是第三方的Bean对象,所以不能用Component,而要用Bean …...
功能更新|Leangoo领歌免费敏捷工具支持SAFe大规模敏捷框架
Leangoo领歌是一款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo可以支持敏捷研发管理全流程,包括小型团队敏捷开发,规模化敏捷SAFe…...
漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案
漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…...
交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装
DX系列信号继电器由矩形脉冲激磁,磁钢保持。本继电器为双绕组。工作线圈可为电压型,亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲,亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…...
SpringCloudAlibaba系列之Nacos配置管理
目录 说明 认识配置中心 Nacos架构图 Nacos配置管理实现原理 核心源码分析-客户端 核心源码分析-服务端 配置修改的实时通知 主流配置中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos配置中心的一些实现,很多细节没有涉及&#…...
Kyligence Copilot 亮相第六届进博会,增添数智新活力
11月5日,第六届中国国际进口博览会(以下简称“进博会”)在上海国家会展中心盛大启幕,众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康(AstraZeneca)合作伙伴,跬智信息(Kyli…...
MySQL 批量修改表的列名为小写
1、获取脚本 SELECT concat( alter table , TABLE_NAME, change column , COLUMN_NAME, , lower( COLUMN_NAME ), , COLUMN_TYPE, comment \, COLUMN_COMMENT, \; ) AS 脚本 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA 数据库名 and TABLE_NAME表名-- 大写是up…...
ElasticSearch 查询方法示例 java
public List<PricePolicyConditionDTO> queryEs(OrderPriceOutDTO param, List<String> materialCodeList, List<String> categoryCodeList) {BoolQueryBuilder mainQueryBoolBuilder new BoolQueryBuilder();//销售组织if (CharSequenceUtil.isNotEmpty(pa…...
5G毫米波通信中的关键技术
随着5G技术的快速发展,毫米波通信作为其中的一项重要技术,在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术,包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…...
2.3.3 交换机的RSTP技术
实验2.3.3 交换机的RSTP技术 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.交换机的基本配置。2.开启交换机的STP。3.配置SW3A和SW3B上STP的优先级。将SW3A配置为根交换机,SW3B配置为备用根交换机。4.配置SW2A和SW2B的边缘接口 六、任务验收七、…...
国外访问学者/博士后留学人员反诈骗指南
访问学者/博士后/联合培养博士人员出国后,对当地环境及政策不熟悉,需要提高防范意识,为此,知识人网小编特整理这篇反诈骗指南,提醒留学人员防微杜渐、未雨绸缪。 近日,多国使馆发布相关提醒:不法…...
设计模式之组合模式-创建层次化的对象结构
目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获(❀❀) 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式,它允许将对象组合成树形结…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
