93.复原IP地址
判断ip是否在0-255放在外面新建了一个逻辑函数就错了,有点没搞懂,时间来不及了,就没细看。
又学到了一个新函数
num, _ := strconv.Atoi(str)//可以将string直接转为int
str := strings.Join(path, ".") //将[]int类型的path转换为string类型,并且在中间加上"."分开.
func restoreIpAddresses(s string) []string {
ret := make([]string, 0)
path := make([]string, 0)
var build func(int)
build = func(index int){
if len(path) > 8 {return}
if len(path) == 8 && index == len(s){
tmp := ""
for i := 0; i < len(path) - 1; i++{
tmp += path[i]
}
ret = append(ret, tmp)
return
}
for i := index;i < len(s); i++{
if i != index && s[index] == '0'{
break
}
str := s[index: i + 1]
num, _ := strconv.Atoi(str)
if num >= 0 && num <= 255{
path = append(path, str)
path = append(path, ".")
build(i+1)
path = path[:(len(path) - 2)]
}
}
}
build(0)
return ret
}
78.子集
子集就是每一个都要存进去

func subsets(nums []int) [][]int {
ret := make([][]int, 0)
path := make([]int, 0)
var build func(int)
build = func(index int){
ret = append(ret, append([]int(nil), path...))
if index == len(nums) { return }
for i := index; i < len(nums); i++{
path = append(path, nums[i])
build(i + 1)
path = path[: (len(path) - 1)]
}
}
build(0)
return ret
}
90.子集II
这里就有重复的了,因为要求不能重复,所以就还是代码随想录中树层不能重复的那一种思路。
if i != index && nums[i] == nums[i - 1]{
continue
}
func subsetsWithDup(nums []int) [][]int {
sort.Ints(nums)
ret := make([][]int, 0)
path := make([]int, 0)
var build func(int)
build = func( index int){
ret = append(ret,append([]int(nil), path...))
if index == len(nums) {
return
}
for i := index; i < len(nums); i++{
if i != index && nums[i] == nums[i - 1]{
continue
}
path = append(path, nums[i])
build(i + 1)
path = path[:(len(path) - 1)]
}
}
build(0)
return ret
}
文章介绍了如何修复一个用于复原IP地址的函数,使用字符串处理和递归方法,并提供了两个生成子集的函数,一个考虑重复,另一个排除重复。
226

被折叠的 条评论
为什么被折叠?



