這是我的代碼來做到這一點。它適用於字符串表示,但不適用於ArrayList<ArrayList<Integer>>
之一。Java中的整數分區
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>的輸出是[[5],[4,1],[3,2],[1,1],[2,2],[1,1,1],[1 ,1,1,1]])
沒有其他人發現問題嗎? – Bohemian
你怎麼解決它?它應該做什麼?換句話說,你顯示的是輸出,但不是它看起來應該是什麼。你是什麼意思「它適用於一個字符串」? –
好吧,我可以發現這個bug:'for(int i = 0; i <= holder.size(); i ++)':'holder.size()'當'i'增加時減少,所以你不會迭代所有持有人,但只有一半。 – amit