我正在撰寫一些代碼以從字串中查找所有回文:
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.
uj5u.com熱心網友回復:
從 JimB 和 Ricardo Souza 發表的評論來看,修復是更新時需要的額外附加*sol:
*sol = append(*sol, append([]string{}, (*curr)...))
此代碼更改會復制*curr.
此外,curr不需要是指標型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405675.html
標籤:
