热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

力扣93:复原IP地址问题解析(Golang实现)

本文探讨了力扣平台上的第93号问题——复原IP地址。该问题要求从给定的纯数字字符串中,通过添加分隔符‘.’来构建所有可能的有效IP地址。有效IP地址由四个介于0至255之间的整数组成,不允许出现前导零。

本文将详细解析力扣(LeetCode)平台上的第93题——复原IP地址。此题的核心在于如何从一个仅包含数字的字符串中,通过适当位置插入‘.’来生成所有可能的有效IP地址组合。有效IP地址严格定义为由四个整数构成,每个整数范围在0到255之间,且不包含前导零,各部分之间使用‘.’进行分隔。


例如,“0.1.2.201”和“192.168.1.1”是有效的IP地址,而“0.011.255.245”、“192.168.1.312”和“192.168@1.1”则不符合标准。


题目要求我们根据给定的字符串s,找出所有可能的有效IP地址。需要注意的是,不能改变或重新排列s中的任何数字,仅能通过插入‘.’来分割字符串。


解题思路如下:



  1. 每个整数可视为具有三种长度:1位、2位或3位。基于这一特性,可以采用递归方法解决问题。

  2. 递归过程中需记录已进行的切分数目,确保总共进行三次切分。当达到第四次切分时,剩余字符串应为空。


下面是具体的Golang代码实现:


func restoreIpAddresses(s string) []string {
return restore(0, "", s, []string{})
}

func restore(count int, ip, s string, res []string) []string {
if count == 4 {
if s == "" {
res = append(res, ip[:len(ip)-1]) // 去除末尾多余的“.”
}
return res
} else if count <4 {
if len(s) > 0 {
res = restore(count+1, ip+s[:1]+".", s[1:], res)
}
if len(s) > 1 && s[0] != '0' {
res = restore(count+1, ip+s[:2]+".", s[2:], res)
}
if len(s) > 2 && s[0] != '0' {
num, _ := strconv.Atoi(s[:3])
if num <= 255 {
res = restore(count+1, ip+s[:3]+".", s[3:], res)
}
}
}
return res
}

在主函数中调用上述函数并测试几个示例:


package main

import (
"fmt"
"strconv"
)

func main() {
fmt.Println(restoreIpAddresses("25525511135"))
fmt.Println(restoreIpAddresses("0000"))
fmt.Println(restoreIpAddresses("101023"))
}

运行结果如下:


[255.255.11.135 255.255.111.35]
[0.0.0.0]
[1.0.10.23 1.0.102.3 10.1.0.23 10.10.2.3 101.0.2.3]

推荐阅读
  • 本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ... [详细]
  • Webpack中实现环境与代码的有效分离
    本文探讨了如何在Webpack中有效地区分开发与生产环境,并实现代码的合理分离,以提高项目的可维护性和加载性能。 ... [详细]
  • 本文探讨了C++编程语言中声明与定义的区别,以及如何通过内部连接和外部连接来组织源文件,确保代码的正确链接与编译。文章详细解析了不同类型、变量、函数以及类的连接属性,并提供了实用的示例。 ... [详细]
  • R语言基础入门指南
    本文介绍R语言的基本概念,包括其作为区分大小写的解释型语言的特点、主要的数据结构类型如向量、矩阵、数据框及列表等,并探讨了R语言中对象的灵活性与函数的应用。此外,文章还提供了关于如何使用R进行基本操作的示例,以及解决常见编程问题的方法。 ... [详细]
  • 探讨 != 运算符在C++中的重写候选条件,分析标准文档中的相关规定及其应用。 ... [详细]
  • 本文介绍了如何通过扩展 Panel 控件来实现滚动条位置的自动保存和恢复。类似于 Page 的 MaintainScrollPositionOnPostBack 属性,我们将在自定义的 TBPanel 控件中添加相同的功能。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文探讨了在JavaScript中执行字符串形式代码的多种方法,包括使用eval()函数以及跨页面调用的方法。同时,文章详细介绍了JavaScript中字符串的各种常用方法及其应用场景。 ... [详细]
  • (详细)快速幂算法及效率分析 大数幂乘 快速幂取余(附测试时间)
    快速幂问题:求a^b%m,即a的b次方对m取余的结果。只要学过C语言的循环就可以写出最简单的朴素版本:朴素版typedeflong ... [详细]
  • 本文详细介绍了Manacher算法,该算法能够在O(n)时间内找到字符串中的最长回文子串。通过对字符串进行预处理,并使用动态规划的思想,Manacher算法能够高效地解决这一问题。 ... [详细]
  • 在Java开发中,使用BASE64编码通常可以直接利用JDK内置的库。然而,在Android平台上,由于安全性和兼容性的考虑,直接引用JDK中的`sun.misc.BASE64Decoder`会导致错误,因此需要引入第三方库来实现相同的功能。 ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 本文介绍了如何在MATLAB中实现单变量线性回归,这是基于Coursera上Andrew Ng教授的机器学习课程中的一个实践项目。文章详细讲解了从数据可视化到模型训练的每一个步骤。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 本文档详细介绍了思科交换机的基本配置命令,包括进入特权模式、配置交换机名称及密码、VLAN配置、端口访问、查看配置信息、恢复出厂设置以及远程登录设置等。 ... [详细]
author-avatar
嘎嘎19850820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有