为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中切片的滥用

Go 中切片的滥用

Go
犯罪嫌疑人X 2022-10-24 15:15:08
我正在编写一些代码以从字符串中查找所有回文:func palindrome(s string) bool {    for i, j := 0, len(s) - 1; i < j; i, j = i + 1, j - 1 {        if s[i] != s[j] {            return false        }    }    return true}func dfs(s string, start int, sol *[][]string, curr *[]string) {    if start == len(s) {        *sol = append(*sol, *curr)        fmt.Println("intermediate value:", *sol)        return    }        for i := start + 1; i <= len(s); i++ {        substr := s[start:i]        if palindrome(substr) {            *curr = append(*curr, substr)            dfs(s, i, sol, curr)            *curr = (*curr)[:len(*curr) - 1]        }    }}func main() {    sol := [][]string{}     dfs("aab", 0, &sol, new([]string))    fmt.Println("last value:", sol)}程序输出:intermediate value: [[a a b]]intermediate value: [[aa b b] [aa b]]last value: [[aa b b] [aa b]]看起来当函数dfs()返回时,sol被破坏并且它的第一个元素从 [aab] 变为 [aa bb]。我无法弄清楚我如何声明和使用参数sol和curr.
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

从 JimB 和 Ricardo Souza 发表的评论来看,修复是更新时需要的额外附加*sol

*sol = append(*sol, append([]string{}, (*curr)...))

此代码更改会复制*curr.

此外,curr不需要是指针类型。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号