これを行うための私のコードは次のとおりです。文字列表現では機能しますが、文字列表現では機能しませんArrayList<ArrayList<Integer>>
。
public static void partition(int n) {
partition(n, n, "",
new ArrayList<ArrayList<Integer>>(),
new ArrayList<Integer>());
}
public static void partition(int n, int max, String temp,
ArrayList<ArrayList<Integer>> master,
ArrayList<Integer> holder) {
if (n == 0) {
ArrayList<Integer> temp1 = new ArrayList<Integer>();
for (int i = 0; i <= holder.size(); i++) {
temp1.add(holder.get(0));
holder.remove(0);
}
master.add(temp1);
System.out.println(temp);
}
for (int i = Math.min(max, n); i >= 1; i--) {
holder.add(i);
partition(n - i, i, temp + " " + i, master, holder);
}
}
私がtemp1で面白いビジネスをしている理由は、マスターに一時を追加すると、前の要素が変更されるためです(マスター内のすべての要素は同じ場所を指す参照になります)。コピー+クリア。
文字列は機能します。なぜそうではないのArrayList<ArrayList<Integer>>
ですか?そして、どうすればそれを修正できますか?
の出力ArrayList<ArrayList<Integer>>
は次のとおりです。
[[5], [4, 1], [3, 2], [1, 1], [2, 2], [1, 1, 1], [1, 1, 1, 1]]