mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
update 0093.复原IP地址: 替换 go 代码
This commit is contained in:
@ -424,6 +424,42 @@ class Solution:
|
|||||||
return True
|
return True
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Go
|
||||||
|
|
||||||
|
```go
|
||||||
|
var (
|
||||||
|
path []string
|
||||||
|
res []string
|
||||||
|
)
|
||||||
|
func restoreIpAddresses(s string) []string {
|
||||||
|
path, res = make([]string, 0, len(s)), make([]string, 0)
|
||||||
|
dfs(s, 0)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
func dfs(s string, start int) {
|
||||||
|
if len(path) == 4 { // 够四段后就不再继续往下递归
|
||||||
|
if start == len(s) {
|
||||||
|
str := strings.Join(path, ".")
|
||||||
|
res = append(res, str)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for i := start; i < len(s); i++ {
|
||||||
|
if i != start && s[start] == '0' { // 含有前导 0,无效
|
||||||
|
break
|
||||||
|
}
|
||||||
|
str := s[start : i+1]
|
||||||
|
num, _ := strconv.Atoi(str)
|
||||||
|
if num >= 0 && num <= 255 {
|
||||||
|
path = append(path, str) // 符合条件的就进入下一层
|
||||||
|
dfs(s, i+1)
|
||||||
|
path = path[:len(path) - 1]
|
||||||
|
} else { // 如果不满足条件,再往后也不可能满足条件,直接退出
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## JavaScript
|
## JavaScript
|
||||||
|
|
||||||
@ -494,48 +530,6 @@ function restoreIpAddresses(s: string): string[] {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
## Go
|
|
||||||
|
|
||||||
回溯(对于前导 0的IP(特别注意s[startIndex]=='0'的判断,不应该写成s[startIndex]==0,因为s截取出来不是数字))
|
|
||||||
|
|
||||||
```go
|
|
||||||
func restoreIpAddresses(s string) []string {
|
|
||||||
var res,path []string
|
|
||||||
backTracking(s,path,0,&res)
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
func backTracking(s string,path []string,startIndex int,res *[]string){
|
|
||||||
//终止条件
|
|
||||||
if startIndex==len(s)&&len(path)==4{
|
|
||||||
tmpIpString:=path[0]+"."+path[1]+"."+path[2]+"."+path[3]
|
|
||||||
*res=append(*res,tmpIpString)
|
|
||||||
}
|
|
||||||
for i:=startIndex;i<len(s);i++{
|
|
||||||
//处理
|
|
||||||
path:=append(path,s[startIndex:i+1])
|
|
||||||
if i-startIndex+1<=3&&len(path)<=4&&isNormalIp(s,startIndex,i){
|
|
||||||
//递归
|
|
||||||
backTracking(s,path,i+1,res)
|
|
||||||
}else {//如果首尾超过了3个,或路径多余4个,或前导为0,或大于255,直接回退
|
|
||||||
return
|
|
||||||
}
|
|
||||||
//回溯
|
|
||||||
path=path[:len(path)-1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func isNormalIp(s string,startIndex,end int)bool{
|
|
||||||
checkInt,_:=strconv.Atoi(s[startIndex:end+1])
|
|
||||||
if end-startIndex+1>1&&s[startIndex]=='0'{//对于前导 0的IP(特别注意s[startIndex]=='0'的判断,不应该写成s[startIndex]==0,因为s截取出来不是数字)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if checkInt>255{
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rust
|
## Rust
|
||||||
|
|
||||||
```Rust
|
```Rust
|
||||||
|
Reference in New Issue
Block a user