这是我的代码来做到这一点。它适用于字符串表示,但不适用于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