golang
func restoreIpAddresses(s string) []string {
res := make([]string, 0)
if len(s) < 4 || len(s) > 12 {
return res
}
recursion(&res, "", s, 0)
return res
}
func isValid(s string) bool {
val, _ := strconv.Atoi(s)
return val >= 0 && val <= 255 && (len(s) == 1 || s[0] != '0')
}
func recursion(res *[]string, s string, t string, k int) {
fmt.Println(s, t)
if k == 3 {
if isValid(t) {
*res = append(*res, s+t)
}
} else {
for i := 1; i < 4 && i < len(t); i++ {
tmp := t[:i]
nxt := t[i:]
//如果后面数位不可能组成正确ip地址就跳过以减少递归次数
if isValid(tmp) && len(nxt) <= (3-k)*3 && len(nxt) >= 3-k {
recursion(res, s+tmp+".", nxt, k+1)
}
}
}
}