1 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個贊
雖然str1+str2確實(shí)返回了新的(與內(nèi)存無關(guān))字符串,append但不會以這種方式運(yùn)行。例如append(str[0:i], str[i+1:]...)會破壞原來的內(nèi)容str,覆蓋str[i:]用str[i+1:]。這是因?yàn)閟tr[0:i]將有能力追加str[i+1:]而不分配新的緩沖區(qū)。
解決方案是在每次迭代中創(chuàng)建一個全新的數(shù)組。至少對于str,因?yàn)閍ppend(prefix, str[i])是免疫這個問題的。例如:
for i := 0; i < n; i++ {
var s []int
s = append(s, str[0:i]...)
s = append(s, str[i+1:]...)
permutation(append(prefix, str[i]), s)
}
https://play.golang.org/p/lXwu39AA0V
有關(guān)切片和附加機(jī)制的更多信息:
http://blog.golang.org/go-slices-usage-and-internals
https://blog.golang.org/slices
- 1 回答
- 0 關(guān)注
- 155 瀏覽
添加回答
舉報