在做leetcode46.全排列的过程中,遇到一个问题。
`func backtrack()` 中结束递归那里,给 `res` 赋值保存结果的时候,不用另外的切片保存 `track` 中的结果,会出现 `res` 结果跟着改变的问题,但是在测试用例 `[1,2,3]` 中结果是正确的,在测试用例 `[5,4,6,2]` 中结果却是错误的。出现这种情况的原因是什么呢?
希望有前辈能够解答我的疑惑。非常感谢。
附上代码:
```go
package main
import "fmt"
func permute(nums []int) [][]int {
res := [][]int{}
track := []int{}
backtrack(track, nums, &res)
return res
}
func backtrack(track []int, nums []int, res *[][]int) {
if len(track) == len(nums) {
// 有困惑的地方
temp := make([]int,len(track))
copy(temp,track)
*res = append(*res, temp)
return
}
for _, v := range nums {
if contains(track, v) {
continue
}
track = append(track, v)
backtrack(track, nums, res)
track = track[:len(track)-1]
}
}
func contains(track []int, val int) bool {
for _, v := range track {
if v == val {
return true
}
}
return false
}
func main() {
nums := []int{1, 2, 3}
fmt.Println(permute2(nums))
}
```
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)