ip复原Java,力扣:复原IP地址

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

示例:

输入: "25525511135"

输出: ["255.255.11.135", "255.255.111.35"]

const SEG_COUNT = 4

var (

ans []string

segments []int

)

func restoreIpAddresses(s string) []string {

segments = make([]int, SEG_COUNT)

ans = []string{}

dfs(s, 0, 0)

return ans

}

//segStart 对应字符串下标

//segId, 对应段数

func dfs(s string, segId, segStart int) {

// 如果找到了 4 段 IP 地址并且遍历完了字符串,那么就是一种答案

//ip地址共4个段

if segId == SEG_COUNT {

if segStart == len(s) {

ipAddr := ""

for i := 0; i < SEG_COUNT; i++ {

//遍历这个数组取出IP地址

ipAddr += strconv.Itoa(segments[i])

if i != SEG_COUNT - 1 {

ipAddr += "."

}

}

ans = append(ans, ipAddr)

}

return

}

// 如果还没有找到 4 段 IP 地址就已经遍历完了字符串,那么提前回溯

if segStart == len(s) {

return

}

// 由于不能有前导零,如果当前数字为 0,那么这一段 IP 地址只能为 0

if s[segStart] == '0' {

segments[segId] = 0

dfs(s, segId + 1, segStart + 1)

}

// 一般情况,枚举每一种可能性并递归

addr := 0

for segEnd := segStart; segEnd < len(s); segEnd++ {

//取出当前的值

addr = addr * 10 + int(s[segEnd] - '0')

if addr > 0 && addr <= 0xFF {

//存储对应的IP值

segments[segId] = addr

dfs(s, segId + 1, segEnd + 1)

} else {

break

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值