题解 | 数字字符串转化成IP地址
数字字符串转化成IP地址
https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e
package main
import (
"strconv"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串一维数组
*/
func restoreIpAddresses( s string ) []string {
// write code here
var res []string
dfs(s, 0, []string{}, &res)
return res
}
// path 存储当前已选的 IP 段(如 ["255", "255"])
func dfs(s string, start int, path []string, res *[]string) {
// 如果已经有 4 段
if len(path) == 4 {
if start == len(s) { // 刚好用完所有字符
*res = append(*res, path[0]+"."+path[1]+"."+path[2]+"."+path[3])
}
return
}
// 剪枝:剩余字符太多或太少都不行 一截最少1位,最多3位
remaining := len(s) - start
if remaining < (4-len(path)) || remaining > (4-len(path))*3 {
return
}
// 尝试取 1~3 位数字作为下一段
for i := 1; i <= 3 && start+i <= len(s); i++ {
segment := s[start : start+i]
// 排除 "0x" 或 "0xx" 的情况(除非就是 "0")
if len(segment) > 1 && segment[0] == '0' {
continue
}
num, _ := strconv.Atoi(segment)
if num > 255 {
continue
}
// 递归
dfs(s, start+i, append(path, segment), res)
}
}
