2017-11-10 4 views
1

私は新しいleanerです。私はそれを使っていくつかのleetcode問題を解決しようとしていますhttps://leetcode.com/problems/subsets-ii/description/。しかし、私は正しい答えを得ることができません、私はそれをデバッグしようとすると、私はいくつかの変数が私はそれに何もアクションをしないで変更を見つける。Golangスライスが変更されていないときに変更されました

package main 

import (
    "fmt" 
    "sort" 
) 

func get_set(nums []int, can []int, pos int, last_in bool) [][]int{ 
    if pos == len(nums) { 
     res := [][]int{can} 
     fmt.Println("Return:") 
     fmt.Println(res) 
     return res 
    } 

    f_res := [][]int{} 
    if !last_in || (pos > 0 && nums[pos]!=nums[pos-1]){ 
     first_res := get_set(nums,can,pos+1,false) 
     fmt.Println("First") 
     fmt.Println(first_res) 
     f_res = append(f_res,first_res...) 
     fmt.Println("f_res") 
     fmt.Println(f_res) 
    } 

    // Problem is here 
    fmt.Println("f_res") 
    fmt.Println(f_res) 
    fmt.Println(can) 
    can = append(can,nums[pos]) 
    fmt.Println(can) 
    // Problem is here 
    fmt.Println("f_res") 
    fmt.Println(f_res) 

    second_res := get_set(nums,can,pos+1,true) 
    fmt.Println("Second") 
    fmt.Println(second_res) 
    f_res = append(f_res,second_res...) 

    fmt.Println("Total") 
    fmt.Println(f_res) 
    return f_res 
} 

func subsetsWithDup(nums []int) [][]int { 
    res := make([][]int,0) 
    sort.Ints(nums) 

    con := make([]int,0) 
    res = get_set(nums,con,0,false) 
    return res 
} 

func main() { 
    nums := []int{1,2,3,4,5} 
    res := subsetsWithDup(nums) 

    fmt.Println(res) 
    //for _,l := range res{ 
    // fmt.Println(l) 
    //} 
} 

印刷情報は、次のとおりです。

... 
Total 
[[1 2 3] [1 2 3 5]] 
First 
[[1 2 3] [1 2 3 5]] 
f_res 
[[1 2 3] [1 2 3 5]] 
f_res 
[[1 2 3] [1 2 3 5]] 
[1 2 3] 
[1 2 3 4] 
f_res 
[[1 2 3] [1 2 3 4]] 
... 

変数f_resは、私はいくつかの値を追加するときコンように変更する理由。 ありがとうございます!

答えて

0
ラインで

can = append(can,nums[pos]) 

あなたは悪い習慣と考えられている関数の引数を、modyfingされています。代わりに新しいスライスを作成し、canスライスの値をコピーします。

+0

ありがとうございます!私は試してみましたが、うまくいかないようですが、f_resがちょうど変わったケースがあります。 –

+0

Thankeあなたは大変です!それは最終的に動作します –

関連する問題