golang 조합 생성에서 오류가 발생했습니다.

키:

프로그래밍 문제를 다루고 있습니다.

두 개의 정수 n과 k가 주어지면 1 ... n 중 k 개의 가능한 모든 조합을 반환합니다.

입력 n = 5, k = 4 인 경우 출력은 [[1,2,3,4], [1,2,3,5], [1,2,4,5], [1,3 , 4,5], [2,3,4,5]], 다음은 내 골랑 솔루션입니다

func combine(n int, k int) [][]int {
    result := [][]int{}
    comb := []int{}
    subcom(0, k, n, &comb, &result)
    return result
}

func subcom(s, k, n int, comb *[]int, result *[][]int) {
    if k > 0 {
        for i := s + 1; i <= n-k+1; i++ {
            c := append(*comb, i)
            subcom(i, k-1, n, &c, result)
        }
    } else {
        *result = append(*result, *comb)
    }
}

내 솔루션이 옳다고 생각하지만 [[1 2 3 5] [1 2 3 5] [1 2 4 5] [1 3 4 5] [2 3 4 5]]를 반환합니다.

디버깅 후 처음에는 결과 조각에 [1 2 3 4]가 추가되었지만 나중에 [1 2 3 5]로 변경되어 [1 2 3 5] 두 번 반복되는 결과를 얻었습니다. 그러나 나는 여기서 무엇이 잘못되었는지 알아낼 수 없습니다.

잎 비밥 :

이는 .NET을 사용할 때 흔히 발생하는 실수 append입니다.

코드가 실행되면 c:=append(*comb,i)먼저 기본 배열의 할당 된 메모리를 사용하여 새 항목을 추가하고 실패한 경우에만 새 슬라이스를 만들려고합니다. 이것은 변경 무엇 [1 2 3 4][1 2 3 5]- 그들은 동일한 기본 메모리를 공유하기 때문이다.

이 문제를 해결하려면 결과에 추가 할 때 복사하십시오.

now := make([]int,len(*comb))
copy(now,*comb)
*result = append(*result,now)

또는 복사 단축키를 사용하십시오.

*result = append(*result, append([]int{},*comb...))

최신 정보:

기본 메모리가 의미하는 바를 이해하려면 Go 슬라이스의 내부 모델을 이해해야합니다.

Go에서 슬라이스는 패키지를 SliceHeader통해 액세스 reflect할 수 unsafe.Sizeof있으며 주소 를 사용 하고 가져올 때 참조 되는 데이터 구조 를 가지고 있습니다.

SliceHeader: 세 가지 요소의 복용 염려 Len, Cap그리고 Ptr. fisrt 두 trivail입니다 : 그들은 무엇 len()cap()입니다. 마지막 uintptr것은 슬라이스에 포함 된 데이터의 메모리를 가리키는 a 입니다.

슬라이스를 얕게 복사하면 새 슬라이스 SliceHeader가 생성되지만 Ptr. 따라서 기본 메모리는 복사되지 않고 공유됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Golang에서 bool 유형 조각을 만드는 동안 오류가 발생했습니까?

C에서 구조체 생성자를 구현하는 동안 오류가 발생했습니다.

550 FTP 서버에 연결할 때 오류가 발생했습니다. C #에서만 발생합니다.

병합 명령문에서 오류가 발생했습니다 - ORA-01747

golang 예제에서 exec kubectl이 po -o yaml을 가져오는 동안 오류가 발생했습니다.

Spring에서 유효성 검사기를 어떻게 사용합니까? 500 오류가 발생했습니다

클로저 내부에서 Map 유형의 속성을 참조 할 때 오류가 발생했습니다.

Range 속성에서 여러 명명 된 범위를 참조 할 때 오류가 발생했습니다.

산술 연산으로 인해 오버플로가 발생했습니다. 강조 표시된 코드 아래에서 오류가 발생했습니다.

내 조각에 대한 바인딩 클래스를 생성하는 중 오류가 발생했습니다.

"기호를 발견했습니다 .."오류가 발생합니까?

Golang에서 간단한 xml을 언 마샬링하는 동안 오류가 발생했습니다.

Golang에서 JSON 배열을 비 정렬 화하는 동안 오류가 발생했습니다.

golang에서 yaml을 구문 분석하는 동안 오류가 발생했습니다.

Firebase Crashlytics 통합 후 서명 된 APK를 생성하는 동안 오류가 발생했습니다.

@Transactional 블록 끝에 고유 제약 조건 오류가 발생했습니다.

구조체에 int 유형을 곱할 때 오류가 발생했습니다.

SKlearn에서 속성 오류가 발생했습니다.

golang에 구조체를 포함하면 "알 수없는 필드"오류가 발생합니다.

Freemarker를 Spring mvc에 통합하는 동안 오류가 발생했습니다.

ggvis를 shiny에 통합하는 동안 오류가 발생했습니다.

ggvis를 shiny에 통합하는 동안 오류가 발생했습니다.

condition = true 인 결합 계획 노드에 오류가 발생했습니다.

아래 코드에서 오류가 발생했습니다. 어레이가 필요하다고 말합니다

(3504) teradata에서 합계를 생성하는 중에 오류가 발생 했습니까?

내부 서버 오류가 발생했습니다. 왜 이런 일이 발생합니까?

Edge의 localStorage가 "Microsoft 인터넷 확장에서 내부 오류가 발생했습니다."를 생성합니다.

RangeError가 발생합니다: Javascript에서 최대 호출 스택 크기가 오류를 초과했습니다.

오류 : 출처 간 오류가 발생했습니다. 오류 : 비밀을 설정해야합니다.

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관