Go 中追加的奇怪行為
問(wèn)題內(nèi)容
我正在嘗試使用 Go 解決 LeetCode 上的子集問(wèn)題。我想出了以下解決方案:
func subsets(nums []int) [][]int {
sol := make([][]int,0)
temp:= make([]int,0)
var backtrack func(idx int)
backtrack = func(idx int) {
sol = append(sol, temp)
fmt.Println(temp, append([]int{},temp...))
if idx == len(nums) {
return
}
for i:= idx; i<len(nums);i++{
temp = append(temp,nums[i])
backtrack(i+1)
temp = temp[:len(temp)-1]
}
}
backtrack(0)
return sol
}
但是,這個(gè)解決方案是不正確的。我注意到我需要使用append(sol,append([]int{},temp…))而不是僅僅sol=append(sol,temp)。
即使 fmt.Println(temp,append([]int{}, temp…)) 語(yǔ)句為 temp 和append([]int{}, temp…) 生成相同的輸出,使用append([]int{}, temp…) 的更正版本實(shí)際上有效。有人可以解釋在這種情況下 temp 和 append([]int{}, temp…) 之間的區(qū)別嗎?為什么修正后的版本可以工作,而初始版本卻不能?
預(yù)計(jì) 和 相同
正確答案的問(wèn)題是您將切片 添加到 中,而不是切片“內(nèi)部”的項(xiàng)目。正如 Slice 內(nèi)部博客文章 中所述,切片“只是”指向數(shù)組的指針、長(zhǎng)度和容量。
因此,在您的情況下,由于 在每次迭代中重用,因此 切片下的數(shù)組內(nèi)容將被覆蓋,并且您之前添加到 的切片內(nèi)的值也將被覆蓋已修改(因?yàn)榍衅碌臄?shù)組已修改)。這就是為什么您最終得到錯(cuò)誤結(jié)果的原因,即使您的 語(yǔ)句顯示在附加之前, 具有正確的值。
當(dāng) 創(chuàng)建一個(gè)新切片時(shí),新切片內(nèi)的值不可能發(fā)生變化,因?yàn)樗鼪](méi)有被重用。
相關(guān)推薦
-
探索Go語(yǔ)言切片的重要性:為何它如此關(guān)鍵?
Go語(yǔ)言切片初探:為什么它如此重要?作為一門靜態(tài)類型編程語(yǔ)言,Go語(yǔ)言在處理數(shù)組時(shí)提供了一種強(qiáng)大且靈活的方式,那就是切片(slice)。在Go語(yǔ)言中,切片是對(duì)數(shù)組的一個(gè)引用,它并不存儲(chǔ)任何數(shù)據(jù),只是描
-
使用pip升級(jí)Python版本的簡(jiǎn)易指南
一步步教你使用pip升級(jí)Python版本,需要具體代碼示例導(dǎo)語(yǔ):Python是一種功能強(qiáng)大的編程語(yǔ)言,常用于開(kāi)發(fā)應(yīng)用程序和網(wǎng)站。隨著Python不斷的發(fā)展和更新,升級(jí)Python版本變得非常重要。本文
-
一步輕松:檢查Python的pip版本
簡(jiǎn)單方法:查詢Python的pip版本,需要具體代碼示例一、引言Python是目前非常流行的編程語(yǔ)言之一,它的功能強(qiáng)大且易于學(xué)習(xí)和使用。Python社區(qū)提供了各種各樣的工具和庫(kù),其中最受歡迎的之一就是
-
Go語(yǔ)言切片底層的實(shí)現(xiàn)原理和優(yōu)勢(shì)分析揭秘
解密Go語(yǔ)言切片的底層實(shí)現(xiàn)原理與優(yōu)勢(shì)分析在Go語(yǔ)言中,切片(slice)是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),它提供了方便、靈活且高效的數(shù)組操作方式。切片的底層實(shí)現(xiàn)原理和優(yōu)勢(shì)是每個(gè)Go語(yǔ)言開(kāi)發(fā)者都應(yīng)該了解的內(nèi)容。本文
-
掌握numpy數(shù)組拼接方法的關(guān)鍵技巧:簡(jiǎn)易入門指南
快速入門:掌握numpy數(shù)組拼接方法的關(guān)鍵技巧在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)領(lǐng)域中,經(jīng)常需要對(duì)多個(gè)數(shù)組進(jìn)行拼接,以便進(jìn)行后續(xù)的操作和分析。NumPy作為Python中最常用的數(shù)值計(jì)算庫(kù),提供了豐富的數(shù)組操作函數(shù)















