我正在編寫一些代碼以從字符串中查找所有回文: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] 變?yōu)?[aa bb]。我無法弄清楚我如何聲明和使用參數sol和curr.
1 回答
猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
從 JimB 和 Ricardo Souza 發(fā)表的評論來看,修復是更新時需要的額外附加*sol:
*sol = append(*sol, append([]string{}, (*curr)...))此代碼更改會復制*curr.
此外,curr不需要是指針類型。
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消
