【CT】LeetCode手撕—93. 复原 IP 地址

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐93. 复原 IP 地址——题解思路
  • 3- ACM 实现


题目

  • 原题连接:93. 复原 IP 地址

1- 思路

模式识别:给一个 String 字符串 ——> 复原 IP 地址 ——> 回溯三部曲 ,回溯的切割问题 ——> 实现一个左闭右闭区间的 isValid 实现
回溯三部曲

  • 1. 定义回溯参数及返回值
    • public void backTracing(String s ,int startIndex,int pointSum)
    • startIndex :代表切割线
    • pointSum :代表 逗点数量
  • 2. 回溯终止条件
    • 用一个全局变量 count 来计算逗号的数量,当逗号的数量达到 3 则此时终止
  • 3. 回溯逻辑
    • for 中 i 从 startIndex 开始,遍历到 s.length()

IP地址合法性判断

    1. 不能以 0 开头
    1. 遍历判断不能是非法字符
    1. 求和不能大于 255

2- 实现

⭐93. 复原 IP 地址——题解思路

在这里插入图片描述

class Solution {public List<String> restoreIpAddresses(String s) {backTracing(s,0,0);return res;}// 回溯List<String> res = new ArrayList<>();public void backTracing(String s, int startIndex,int pointSum){//2. 终止条件if(pointSum==3){if(isValid(s,startIndex,s.length()-1)){res.add(s);}return;}//3. 遍历回溯逻辑for(int i = startIndex;i<s.length();i++){if(isValid(s,startIndex,i)){s = s.substring(0,i+1)+"."+s.substring(i+1);pointSum++;backTracing(s,i+2,pointSum);pointSum--;s = s.substring(0,i+1)+s.substring(i+2);}else{break;}}}public Boolean isValid(String s,int start,int end){if(start>end){return false;}if(start!=end && s.charAt(start)=='0'){return false;}// 遍历判断,字符合法 ,是否超过 255int sum = 0;for(int i = start;i <= end;i++){if(s.charAt(i) >'9' || s.charAt(i) <'0'){return false;}sum = sum*10 + (s.charAt(i)-'0');if(sum>255){return false;}}return true;}
}

3- ACM 实现

public class remakeIP {static List<String> res = new ArrayList<>();public static List<String> splitIP(String s){backTracing(s,0,0);return res;}// 回溯参数及返回值public static void backTracing(String s,int startIndex,int pointSum){// 2. 终止条件if(pointSum==3){if(isValid(s,startIndex,s.length()-1)){res.add(s);}return ;}//3. 回溯for(int i = startIndex; i < s.length();i++){if(isValid(s,startIndex,i)){s = s.substring(0,i+1) + "."+s.substring(i+1);pointSum++;backTracing(s,i+2,pointSum);s = s.substring(0,i+1)+s.substring(i+2);pointSum--;}else{break;}}}public static boolean isValid(String s ,int start,int end){if(start>end){return false;}// 判断前置 0if(start!=end && s.charAt(start)=='0'){return false;}// 遍历判断 非法字符 和 255int sum = 0;for(int i = start; i <= end;i++){if(s.charAt(i)>'9' || s.charAt(i)<'0'){return false;}sum = sum*10+(s.charAt(i)-'0');if(sum>255) {return false;}}return true;}public static void main(String[] args) {System.out.println("输入字符串s");Scanner sc = new Scanner(System.in);String input = sc.next();splitIP(input);for(String s : res){System.out.println(s+" ");}}
}

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

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

相关文章

利用redis数据库管理代理库爬取cosplay网站-cnblog

爬取cos猎人 数据库管理主要分为4个模块&#xff0c;代理获取模块&#xff0c;代理储存模块&#xff0c;代理测试模块&#xff0c;爬取模块 cos猎人已经倒闭&#xff0c;所以放出爬虫源码 api.py 为爬虫评分提供接口支持 import requests import concurrent.futures import …

银河麒麟高级服务器操作系统(通用)安装和编译指定的python3版本

银河麒麟高级服务器操作系统&#xff08;通用&#xff09;安装和编译指定的python3版本 一 系统环境二 安装python3.12.42.1 安装编译需要的依赖包2.2 下载官网目前最新的python源码包2.3 解压Python-3.12.4.tar.xz2.4 配置python-3.12.42.5 编译安装2.6 配置环境变量使其生效2…

Artificial Intelligence Self-study

Artificial Intelligence Self-study Traditional AI (Symbolic AI) 基于&#xff1a;符号表示 数理逻辑 搜索 - 有明确规则&#xff0c;依靠算力。Appliance &#xff1a; 数学难题(Heuristic Algorithm)&#xff0c;棋牌对抗(围棋)&#xff0c;专家系统(输入病症&#xf…

linux安装jdk1.8(无废话版)

文章目录 1、下载安装包2、创建文件目录&#xff0c;并将安装包上传到该目录下3、解压安装包4、配置环境变量5、加载配置文件6、验证 前言&#xff1a;linux系统以ubuntu20.04.6版本为例&#xff0c;jdk版本jdk-8u411-linux-x64.tar.gz版本为例 1、下载安装包 jdk下载地址&am…

Python中列表推导式的概念以及示例

列表推导式&#xff08;List Comprehension&#xff09;是Python中一种简洁而强大的工具&#xff0c;用于从现有的可迭代对象&#xff08;如列表、元组、字符串等&#xff09;中快速生成新的列表。它提供了一种优雅的方式来表达循环和条件逻辑&#xff0c;以生成列表。列表推导…

2. 创建kvm虚拟机

创建kvm虚拟机 一、创建kvm虚拟机1、virt-manager 图形化工具2、virt-install 命令行工具3、查看虚拟机 一、创建kvm虚拟机 1、virt-manager 图形化工具 2、virt-install 命令行工具 [rootlocalhost ~]# virt-install --namevm02_centos79 \ > --graphics vnc,listen0.0.0…

linux下删除当前路径下的所有文件夹但保留文件

打开终端&#xff0c;输入&#xff0c; find . -mindepth 1 -maxdepth 1 -type d -exec rm -r {} 解释&#xff1a; find是查找文件和文件夹的命令。.表示当前路径。-mindepth 1表示最小搜索深度为1&#xff0c;这样不会包括当前目录。-maxdepth 1表示最大搜索深度为1&#x…

『Python学习笔记』Python运行设置PYTHONPATH环境变量!

Python运行设置PYTHONPATH环境变量&#xff01; 文章目录 一. Python运行设置PYTHONPATH环境变量&#xff01;1. 解释2. 为什么有用3. 示例4. vscode配置 一. Python运行设置PYTHONPATH环境变量&#xff01; export PYTHONPATH$(pwd) 是一个命令&#xff0c;用于将当前目录添…

举例C++程序在线程出错后重启线程

在C中&#xff0c;当一个线程出现错误时&#xff0c;可以通过捕获异常并重新启动线程来实现自动重启线程的功能。以下是一个简单的例子&#xff0c;展示了如何实现这一功能&#xff1a; #include <iostream> #include <thread> #include <exception> #inclu…

Java的数据类型(复习版)

思维导图 一.字面常量 什么是常量&#xff1f;在我的理解看来常量就是在一个程序运行期间&#xff0c;保持不变的量就是常量。 例如&#xff1a; System.out.println(100);System.out.println(a);System.out.println(3.114);这些都可以称为常量。 字面常量的分类&#xff1a;…

Swagger的原理及应用详解(七)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;特别是随着微服务架构和前后端分离开发模式的普及&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;的设计与管理变得愈发重要。一个清晰、准确且易…

将 WSL(Windows Subsystem for Linux)移动到另一个盘上

方法一&#xff1a;通过 wsl --export 和 wsl --import 命令 导出当前的 WSL 分发版&#xff1a; 首先&#xff0c;您需要导出当前运行的 WSL 分发版。假设您的分发版名称为 Ubuntu-20.04&#xff0c;执行以下命令&#xff1a; wsl --export Ubuntu-20.04 D:\WSL\Ubuntu-20.04.…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好&#xff1f;在这个快节奏的时代&#xff0c;护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明&#xff0c;还是针对孩子学习是改善光线质量环境&#xff0c;一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 引入对应的依赖库 <!--jts库通常用于几何计算和表示地理空间数据--> <dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><…

Python中定位一个序列中特点值出现的位置,比如 [0,0,0,1,1,0,0,]中1的位置

已知 Python中计算一个序列中特点值出现的数量&#xff0c;比如 [0,0,0,1,1,0,0,]中1的数量 如何定位位置呢 要找到列表 [0, 0, 0, 1, 1, 0, 0] 中 1 出现的位置&#xff08;索引&#xff09;&#xff0c;可以使用 Python 的列表推导式或者循环。以下是几种方法&#xff1a; …

在 VS Code 中自动化 Xcode 项目编译和调试

在 VS Code 中自动化 Xcode 项目编译和调试 在日常的开发工作中&#xff0c;Xcode 是 macOS、iOS、watchOS 和 tvOS 应用程序开发的主要工具。为了提高工作效率&#xff0c;许多开发者选择在 Visual Studio Code (VS Code) 中编辑代码&#xff0c;并希望能够直接从 VS Code 启…

无线传感器网络(物联网通信技术)期末考试2024年真题

目录 WSN期末复习资料 第一章&#xff1a;概述 第二章MAC协议 第三章路由协议 第四章时间同步技术 第五章定位技术 第六章安全技术 第七章拓扑控制 补充TPSN、HRTS公式推导 2024年期末考试考点 一、简述 二、考试真题回忆 WSN期末复习资料 第一章&#xff1a;概述 …

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——新建工程

一、介绍 ​ 蓝桥杯嵌入式使用的单片机是STM32G431RBT6&#xff0c;内核ARM Cortex - M4&#xff0c;MCUFPU&#xff0c;170MHz/213DMIPS&#xff0c;高达128KB Flash&#xff0c;32KB SRAM&#xff0c;其余的外设就不多介绍了&#xff0c;参照数据芯片数据手册 ​ CT117E-M4…

JavaScript——while类型

目录 任务描述 相关知识 while类型 编程要求 任务描述 质数的定义如下&#xff1a;大于1的自然数&#xff0c;且除了1和本身外没有别的因数。如2、3、5、7。 本关任务&#xff1a;利用循环结构求质数的和。 相关知识 在选择结构中&#xff0c;条件会被测试一次&#xff…

【matlab】信号分解/故障诊断——智能优化算法优化VMD

目录 引言 应用领域 VMD代码实现 智能优化算法优化VMD 引言 VMD&#xff08;变分模态分解&#xff09;是一种新的非线性自适应信号分解方法&#xff0c;它通过变分原理将复杂信号分解为若干个具有不同频率中心和带宽的本征模态函数&#xff08;Intrinsic Mode Functions, …