我正在嘗試實作一個 golang 函式來解決陣列子集問題。我在將整數切片硬復制到我的 2D 切片時遇到問題:
// Subsets
func Subsets(nums []int) [][]int {
// create 2D slice
sets := make([][]int, 0)
backtrack(sets, make([]int, 0), nums, 0)
return sets
}
func backtrack(sets [][]int, tempList []int, nums []int, start int) {
// insert current list
sets = append(sets, tempList) // <---------HERE
for i := start; i < len(nums); i {
tempList = append(tempList, nums[i])
backtrack(sets, tempList, nums, i 1)
tempList = tempList[:len(tempList)-1]
}
}
我嘗試將 append 陳述句替換為:
buffer := make([]int, len(tempList))
copy(buffer, tempList)
sets = append(sets, buffer)
但是,當程式結束時,我仍然看到集合切片為空。此函式的相同副本在 java 中可以正常作業,附加行如下:
list.add(new ArrayList<>(tempList));
在golang中這樣做的正確方法是什么?
uj5u.com熱心網友回復:
我不確定這里到底有什么要求。但是有幾點需要注意: 按值傳遞:您正在傳遞setstobacktrack函式。當你這樣做時,Go 會復制它的值并將其傳遞給backtrack函式。但是,修改后sets的內容不會回傳。隨時隨地查看這些變化。
https://go.dev/play/p/gULT7UcChI1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/442998.html
下一篇:go中的顏色操作
