题解 | 数字字符串转化成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)
	}

}

全部评论

相关推荐

12-19 16:52
门头沟学院
点赞 评论 收藏
分享
程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务