2016-12-31 5 views
0

私は順列の問題に取り組んでいたし、私は以下のコードを持っている:なぜ私はlist.add(新しいArrayList <>(temp));を実行する必要がありますか?リストを2Dリストに追加するとき

public List<List<Integer>> permute(int[] nums) { 
    List<List<Integer>> list = new ArrayList<>(); 
    helper(list,new ArrayList<Integer>(), nums); 
    return list; 
} 

private void helper(List<List<Integer>> list, List<Integer> temp, int[] num) { 
    if (temp.size() == num.length) { 
     list.add(new ArrayList<>(temp)); 
    } 
    else { 
     for (int i = 0; i < num.length; i++) { 
      if (temp.contains(num[i])) continue; 
      temp.add(num[i]); 
      helper(list, temp, num); 
      temp.remove(temp.size() - 1); 
     } 
    } 
} 

私は理解していないです私は書く必要がない理由:

list.add(new ArrayList<>(temp)); 

の代わりに:

list.add(temp); 
+0

'new ArrayList <>(temp)'とは何ですか? –

+0

しないとどうなりますか? –

+0

もし私がlist.add(temp);私は私の答えで空のリストを取得します。 – user2817869

答えて

3

new ArrayList<>(temp)は、tempと同じ要素を持つ新しいArrayListを作成します。

ArrayList<Integer> temp = new ArrayList<>(); 
// populate temp here 
object.helper(list, temp, someIntArray); 
temp.clear() 

helperによって記憶されたリストclearに影響されない:これはhelperの呼び出しのようなものをしている場合ことを意味します。

関連する問題