[求助]用Go编写leetcode全排列时遇到的问题

1019387020 · · 776 次点击 · 开始浏览    置顶
在做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)) } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

776 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传