Go를 사용하여 LeetCode의 하위 집합 문제를 해결하려고 합니다. 나는 다음과 같은 해결책을 생각해냈습니다:
으아아아그러나 이 해결책은 올바르지 않습니다. sol=append(sol,temp) 대신에append(sol,append([]int{},temp...))를 사용해야 한다는 것을 알았습니다.
fmt.Println(temp,append([]int{}, temp...)) 문이 temp 및append([]int{}, temp...)에 대해 동일한 출력을 생성하더라도,append([ ]int {}, temp...) 실제로 작동합니다. 이 경우 임시와 추가([]int{}, temp...)의 차이점을 설명할 수 있는 사람이 있나요? 수정된 버전은 작동하지만 초기 버전은 작동하지 않는 이유는 무엇입니까?
temp
와 append([]int{},temp...)
는 동일할 것으로 예상됩니다temp
和 append([]int{},temp...)
相同
sol =append(sol, temp)
的问题是您将切片 temp
添加到 sol
정답
sol =append(sol, temp)
의 문제점은 슬라이스 대신 sol
에 temp
슬라이스를 추가한다는 것입니다. 슬라이스 "내부" 항목입니다. Slice 내부 블로그 게시물temp
在每次迭代中重用,因此 temp
切片下的数组内容将被覆盖,并且您之前添加到 sol
的切片内的值也将被覆盖已修改(因为切片下的数组已修改)。这就是为什么您最终得到错误结果的原因,即使您的 fmt.Println
语句显示在附加之前, temp
에서 언급했듯이 슬라이스는 배열의 길이와 용량에 대한 포인터일 뿐입니다.
따라서 귀하의 경우에는 append([]int{}, temp...)
의 값이 정확합니다.
위 내용은 Go에서 추가의 이상한 동작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!