LeetCode93. 复原IP地址Golang版
1. 问题描述
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 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 地址。


2. 思路
回溯模板题([startIndex:i]就是要截取的子串)
3. 代码
func restoreIpAddresses(s string) []string {
var res []string
if len(s) > 12 {
return res
}
backtracking(s, 0, 0, &res)
return res
}
func backtracking(s string, startIndex int, pointNum int, res *[]string) {
if pointNum == 3 {
if isValid(s, startIndex, len(s) - 1) {
*res = append(*res, s)
}
return
}
for i := startIndex; i < len(s); i++ {
if isValid(s, startIndex, i) {
sb := []byte(s)
sb = append(sb, '.')
copy(sb[i+2:], sb[i+1:])
sb[i+1] = '.'
s = string(sb)
pointNum++
backtracking(s, i + 2, pointNum, res)
pointNum--
sb1 := []byte(s)
copy(sb1[i+1:],sb1[i+2:])
temp := make([]byte, len(sb1) - 1)
copy(temp, sb1)
s = string(temp)
} else {
break
}
}
}
func isValid(s string, start int, end int) bool {
if start > end {
return false
}
if s[start] == '0' && start != end {
return false
}
num := 0
for i := start; i <= end; i++ {
if s[i] > '9' || s[i] < '0' {
return false
}
num = num * 10 + int(s[i]) - int('0')
if num > 255 {
return false
}
}
return true
}
本文介绍如何使用Golang解决LeetCode题目93,涉及回溯算法,通过递归遍历可能的IP地址组合。讲解了如何检查字符串是否为有效IP并进行回溯操作,生成所有合法的IP地址。
326

被折叠的 条评论
为什么被折叠?



