leetcode每日一题疑惑
今天的leetcode每日一题129. 求根到叶子节点数字之和
看完题以后想了种解法(比较繁琐,层序遍历,记录到根节点的所有数字,最后再求和),不要在意细节,看完题解发现自己写的太复杂了,此文不讨论算法,记录下其中的一个疑惑,希望有大佬给解答下。
先上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| func sumNumbers(root *TreeNode) int { if root == nil { return 0 } numbers := [][]int{} queue := make([]*TreeNode, 0) queue = append(queue, root) values := make([][]int, 0) values = append(values, []int{root.Val}) for len(queue) > 0 { q := queue[0] v := values[0] queue = queue[1:] values = values[1:] if q.Left == nil && q.Right == nil { numbers = append(numbers, v) } if q.Left != nil { queue = append(queue, q.Left) values = append(values, append(v, q.Left.Val)) } if q.Right != nil { queue = append(queue, q.Right) values = append(values, append(v, q.Right.Val)) } } ans := 0 for _, number := range numbers { sum := 0 for i := 0; i < len(number); i++ { sum = sum*10 + number[i] } ans += sum } return ans }
|
给的用例通过了,于是提交,发现卡在这个用例上

debug以后,发现在进行到其中某一步的时候values中第一个切片最后一个元素本来是9,后来变成5了,不明白咋回事
原来values [[8,3,9,9]],append一个切片[8,3,9,5]以后应该是[[8,3,9,9], [8,3,9,5]],可是变成了[[8,3,9,5], [8,3,9,5]],导致结果出错,应该是切片的问题,不太明白,谁能解释一下其中的原因,为啥原有的数据会被改变,感谢大佬。
注释掉的是后来把切片copy了下,问题解决了,知道是切片问题,没想明白为啥。
提供下出错用例的树形结构供debug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| type TreeNode struct { Val int Left *TreeNode Right *TreeNode }
func main() { node5 := &TreeNode{Val: 5} node52 := &TreeNode{Val: 5} node92 := &TreeNode{Val: 9} node9 := &TreeNode{Val: 9, Left: node92, Right: node52} node3 := &TreeNode{Val: 3, Left: nil, Right: node9} node8 := &TreeNode{Val: 8, Left: node3, Right: node5} fmt.Println(sumNumbers(node8)) }
|