自己想的。。可能剪枝条件还是不太好。。
func restoreIpAddresses(_ s: String) -> [String] {
let len = s.count
var ans = [String]()
let numArray = Array(s)
var tempArray = [String]()
var sumLen = 0
dfs(0,0,numArray,len,&sumLen,&tempArray,&ans)
return ans
}
func dfs(_ index:Int, _ bengin:Int,_ numArray:[Character],_ len:Int,_ sumLen:inout Int,_ tempArray:inout [String],_ ans:inout [String]){
//因为只能有四个数
if index == 4 {
// //长度不够,肯定不符合要求
if sumLen == len {
ans.append(tempArray.joined(separator: "."))
}
return
}
//每一层可以选择的数字
for i in bengin..<len {
var str = ""
for j in 0..<3 {
if i + j < len {
str.append(numArray[i + j])
//1位数字的话都可以。。2位数字的话 要大于10 三位数字的话要大于100小于等于255
let numValue = Int(str) ?? 0
if (j == 2 && numValue <= 255 && numValue >= 100) || ( j == 1 && numValue >= 10) || j == 0{
sumLen += str.count
tempArray.append(str)
dfs(index + 1,i + j + 1,numArray,len,&sumLen,&tempArray,&ans)
sumLen -= tempArray.removeLast().count
//不用往下找了
if j == 2 {
return
}
}
}
}
}
}
网友评论