每日一练 | Day 11

ops/2024/9/20 3:58:01/ 标签: 算法, 学习

93. 复原 IP 地址

题目链接

https://leetcode.cn/problems/restore-ip-addresses/

相关算法

回溯

题目描述

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 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.length <= 20
  • s 仅由数字组成

解题思路

本题显然也可以使用回溯法来做,而比起之前不断构造新的路径的思路,这题显然尝试不断向原字符串中插入 '.' 会更加简便,所以考虑使用 StringBuilder 对原字符串进行存储,便于后续编辑操作。我们可以在每次尝试插入前,先判断插入后分割出来的片段是否合法,大致需要判断的内容如下:

  1. 片段长度,如果片段长度大于 3,则表示的数值大小必定大于 255
  2. 数值大小:
    • 如果片段长度小于 3,则合法,因为数值必定是处于 0255 的区间内
    • 如果片段长度等于 3,则需要判断当前数值与 255 的大小关系

于是有以下代码:

private boolean isValid(int start, int end, StringBuilder sb) {if (start > end || end - start >= 3) {return false;}if (sb.charAt(start) == '0' && start != end) {return false;}if (end - start == 2) {int num = 0;for (int i = start; i <= end; i++) {num = 10 * num + (sb.charAt(i) - '0');}return num <= 255;}return true;
}

在回溯的递归函数中,我们需要考虑传入哪些参数,首先,暂存的 StringBuilder 对象是需要的,然后是当前加点切割的起始点 start。而为了便于终止回溯,我们再传入一个 count 用于记录当前已经添加了多少个 '.',接下来,就按照回溯的思路来写就行了。

完整代码

class Solution {List<String> ans = new ArrayList<>();public List<String> restoreIpAddresses(String s) {if (s.length() < 4 || s.length() > 12) {return ans;}StringBuilder temp = new StringBuilder(s);backtrace(0, 0, temp);return ans;}private void backtrace(int start, int count, StringBuilder sb) {if (count == 3 && isValid(start, sb.length() - 1, sb)) {ans.add(sb.toString());return;}for (int i = start; i < sb.length(); i++) {if (isValid(start, i, sb)) {sb.insert(i + 1, '.');backtrace(i + 2, count + 1, sb);sb.deleteCharAt(i + 1);}}}private boolean isValid(int start, int end, StringBuilder sb) {if (start > end || end - start >= 3) {return false;}if (sb.charAt(start) == '0' && start != end) {return false;}if (end - start == 2) {int num = 0;for (int i = start; i <= end; i++) {num = 10 * num + (sb.charAt(i) - '0');}return num <= 255;}return true;}
}

http://www.ppmy.cn/ops/93867.html

相关文章

2024年优秀的网站建设公司推荐

如今&#xff0c;高达 48% 的用户认为&#xff0c;判断企业信誉的首要因素是其网站设计。我整理了一份 2024 年全球顶级网站设计公司名单。 企业为什么要投资网站设计和开发&#xff1f; 数字平台或社交媒体在当前情况下取得了飞跃&#xff0c;帮助企业上以数字方式推广他们的…

C++基础语法(C基础上的学习):关键字(持续更新)

关键字 1、typedef typedef 是 C 中的一个关键字&#xff0c;用于为现有的数据类型创建一个新的名称&#xff08;别名&#xff09;。这可以提高代码的可读性和可维护性&#xff0c;特别是在处理复杂类型时。 typedef 现有类型 新类型名称;例如&#xff1a; typedef int Inte…

在寻找高清修复图片免费软件?6个软件帮你快速进行图片修复

在寻找高清修复图片免费软件&#xff1f;6个软件帮你快速进行图片修复 以下是六款免费的高清修复图片软件&#xff0c;它们能帮助你快速提升图片质量&#xff0c;实现高效的修复效果。 智能修复老照片 这是一款非常方便的图像编辑软件&#xff0c;这是一款非常简单方便好上…

Linux下ETCD安装、配置、命令

目录 1. ETCD简介 2. ETCD的安装 2.1 准备环境 2.2 下载ETCD 2.3 解压和移动文件 2.4 验证安装 3. ETCD的配置 3.1 基本配置 3.2 配置文件 3.3 集群配置 4. ETCD的常用命令 4.1 插入键值对 4.2 读取键值对 4.3 删除键值对 4.4 监视键的变化 4.5 列出所有键值 …

微信小程序前沿技术

微信小程序的前沿技术涵盖了多个方面&#xff0c;这些技术不仅提升了小程序的性能和用户体验&#xff0c;还推动了小程序在更多场景下的应用。以下是一些主要的微信小程序前沿技术&#xff1a; 1. 云开发与云托管 小程序云开发&#xff1a;腾讯云为微信小程序提供的一站式后端…

Flink 1.20 最新版本 Windows本地运行

Apache Flink 1.20 是 Flink 的一个较新版本&#xff0c;它带来了许多改进和新功能&#xff0c;如物化表、统一的检查点文件合并机制等。然而&#xff0c;关于 Flink 1.20 在 Windows 本地运行的具体步骤&#xff0c;虽然 Flink 本身是跨平台的&#xff0c;但官方文档和社区资源…

OpenAI支持function calling的模型

最近在梳理function calling的模型&#xff0c;所以特地了解了一下openai支持function calling的模型&#xff1a; 支持function calling的模型版本&#xff1a;gpt-4o, gpt-4o-2024-08-06, gpt-4o-2024-05-13, gpt-4o-mini, gpt-4o-mini-2024-07-18, gpt-4-turbo, gpt-4-turbo…

Sqlserver存储过程快速上手分享

文章目录 一、前言1.1 什么是Sqlserver1.2 什么是存储过程1.3 使用场景1.4 Sqlserver存储过程编写过程1.5 使用工具 二、创建一个sqlserver的存储过程2.1 编写一个基础的结构2.2 确定输入参数2.3 编写过程思考&#xff1a;天数进行for循环思考&#xff1a;然后把for循环的结果存…

RabbitMQ消息队列

消息队列概念 什么是消息队列 消息&#xff08;Message&#xff09;是指在应用间传送的数据消息队列&#xff08;Message Queue&#xff09;是一种应用间的通信方式解决方法&#xff0c;确保消息的可靠传递、主流消息队列 目前主流的几大消息1队列有&#xff1a;RabitMQ、Acti…

DLMS/COSEM中的信息安全:安全密钥(下)

2.5组件B终端实体证书类型要由DLMS/COSEM服务器支持 每个DLMS/COSEM服务器应使用X.509 v3格式&#xff0c;并包含以下任一项&#xff1a; ——具有P-256或P-384 ECDSA功能的签名密钥&#xff1b;或 ——具有P-256或P-384 ECDSA功能的密钥协商密钥。 每张证书均应使用ECDSA进行签…

无人机之陀螺仪篇

陀螺仪器最早是用于航海导航&#xff0c;但随着科学技术的发展&#xff0c;它在航空和航天事业中也得到广泛的应用。陀螺仪不仅可以作为指示仪表&#xff0c;而更重要的是它可以作为自动控制系统中的一个敏感元件&#xff0c;即可作为信号传感器。 根据需要&#xff0c;陀螺仪器…

Magic Number Group

登录—专业IT笔试面试备考平台_牛客网、 把每个数的质因数分解出来&#xff0c;用莫队做&#xff0c;找区间众数即可 // Problem: Magic Number Group // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/21592/G // Memory Limit: 524288 MB // Time Limit:…

如何在 Windows 上安装 FastReport .NET 及其组件

要安装 FastReport.NET 软件及其组件&#xff0c;您需要在 cpanel 中下载安装程序分发并 运行它。当使用具有 UAC&#xff08;用户帐户控制&#xff09;的操作系统时&#xff0c;您需要同意运行该软件。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;M…

无线领夹麦克风六大常见缺陷曝光:拒绝冲动谨防劣质产品!

​在当下这个全民皆为媒体的时代大潮中&#xff0c;视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下&#xff0c;若要在这片广阔海洋中扬帆远航&#xff0c;优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作&#xff0c;除了需要创…

Linux——进程(2)

一、父子进程的关系 子进程是父进程的副本。 子进程获得父进程数据段&#xff0c;堆&#xff0c;栈&#xff0c;正文段共享。 在fork之后&#xff0c;一般情况哪个会先运行&#xff0c;是不确定的。 如果非要确定那个要先运行&#xff0c;需要IPC机制。 1、区别 1&…

ZAN与Mysten Labs合作推进Web3基础设施开发

Mysten Labs是一家Web3基础设施公司&#xff0c;也是Sui区块链的开发公司&#xff0c;今天宣布与蚂蚁数字科技的技术品牌ZAN建立合作伙伴关系。 通过整合Sui&#xff0c;ZAN旨在加速其Web3应用程序的开发和采用。该合作将专注于为Mysten Labs在两个关键领域提供技术支持&#…

oracle 数据中lsnrctl 是干啥的

突然发现lsnrctl stop 之后&#xff0c;依然可以启动数据库 就感觉怪怪的&#xff0c;一直以为这个是数据库的守护进程&#xff0c;原来不是。。。。 lsnrctl 是 Oracle 监听器控制实用程序的命令行界面工具&#xff0c;用于管理 Oracle Net 服务监听器。监听器是 Oracle 网络…

Python爬虫——爬取bilibili中的视频

爬取bilibili中的视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入bilibili官网中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到…

汽车精密设计、无人机外形优化总是遇难题?CFD参数优化详解2来袭

数值仿真的参数优化 在上期文章中&#xff0c;我们给大家带来了机翼多学科优化、拟合试验曲线、一维CFD模型参数的DOE和回归分析三个参数优化案例&#xff0c;本期文章将继续为各位讲解多个 Altair CFD 参数优化案例&#xff0c;一起来看看吧。 案例&#xff1a;汽车排气管形状…

7.2 我们机房断网了!--图文解析

7.2 我们机房断网了&#xff01;–图文解析 原文链接&#xff1a;https://juejin.cn/post/7399569706183049250 原文作者&#xff1a;哔哩哔哩技术团队 1、背景 原文&#xff1a; 2024 年 7 月 2 日 10:04&#xff0c;我站机房 A 公网物理光缆中断&#xff0c;导致机房 A …