append元素时明明没append某个元素,不知道为什么结果里有
大家好,非常感谢能抽出百忙的时间看小弟这样一个问题
我在用golang刷leetcode 39题时遇到一个问题(和算法没关系)
大概是 a=append(a,b),我打出了b,但是a里出现了不是b的元素
package main
import (
"fmt"
)
var res [][]int //保存被递归函数append的结果
func CombinationSum(candidates []int, target int) [][]int {
var steps []int
combile(candidates, steps, target, 0)
return res
}
func combile(nums []int, steps []int, target int, index int) {
if target < 0 {
return
}
if target == 0 {
fmt.Println("steps=", steps)//要append进去的元素
res = append(res, steps)
return
}
length := len(nums)
for i := index; i < length; i++ {
num := nums[i]
steps_ := append(steps, num)
target_ := target - num
if target_ < 0 {
break
}
combile(nums, steps_, target_, i)
}
}
func main() {
nums := []int{2, 3, 5, 7}
target := 8
res := CombinationSum(nums, target)
fmt.Println(res)
}
结果是
steps= [2 2 2 2]
steps= [2 3 3]
steps= [3 5]
[[2 2 2 3] [2 3 3] [3 5]]
我第一个append进去的明明是[2,2,2,2]
不知道为什么会变成[2,2,2,3]
不知道res在哪个地方被修改了,能修改的也就只有打印steps的那个地方
1 .如果追加数组进另一个数组里,记得解包