這是代碼:
package main
import "fmt"
func anon(n []int, sl []int, result [][]int) {
if len(n) == 0 {
result = append(result, sl)
fmt.Printf("result %v\n", result)
return
}
for i , _ := range n {
fmt.Printf(" n %v\n", n)
sl = append(sl, n[i])
ab := append(n[:i], n[i 1:]...)
fmt.Printf("i %v ---ab %v, sl %v, result %v ---\n",i, ab,sl,result )
anon(ab, sl , result)
}
}
func permute(nums []int) [][]int {
var sl1 = []int{}
var result = [][]int{}
anon(nums, sl1, result)
return result
}
func main() {
sl2 := []int{1,2}
permute(sl2)
}
我期待“結果”為 [[1,2], [2,1]]。但是,當我查看代碼運行的以下輸出時:
n [1 2]
i 0 ---ab [2], sl [1], result [] ---
n [2]
i 0 ---ab [], sl [1 2], result [] ---
result [[1 2]]
n [2 2]
i 1 ---ab [2], sl [1 2], 結果 [] ---
n [2]
i 0 ---ab [], sl [1 2 2], result [] ---
result [[1 2 2]]
我看到(粗體)i=1,我有 ab[2]、sl[1 2]、result[] 和 n[2,2]。我無法讓它為 Golang 作業。類似的東西適用于 Python。
謝謝回答。
uj5u.com熱心網友回復:
檢查這個完整的示例,它可以幫助您更好地理解如何使用golang
:https : //go.dev/play/p/JKG_FtilQCz進行排列。
在 Golang 中,切片是指向陣列的指標,當您append(n[:i], n[i 1:]...)
在變數中添加一個新值時n
,因此您正在更改初始sl2
值,該值應該是 {1,2},但正如您所指出的那樣在 {2,2} 中進行了轉換。盡量不要 append in n
,而是 append inab
或其他東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400768.html