【发布时间】:2014-12-28 07:47:24
【问题描述】:
我正在尝试编写一个递归方法,该方法允许我对数组中所有可能的整数变体求和。
例如。对于具有以下值的数组 [1, 2, 3, 4]
结果:[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3], [1, 2, 3], [1, 2, 4], [2, 1, 3] , [2, 1, 4] 等等等等。
我对递归完全陌生。我的理解是将问题分解为一个较小的问题。但是对于这种情况,我似乎看不到它。有人可以帮我吗?
编辑:
class Stick {
public int sum(ArrayList<Integer> array) {
int total = 0;
for(int i = 0; i < array.size(); i++) {
total += array.get(i);
}
return total;
}
public void permute(ArrayList<Integer> in, ArrayList<Integer> out) {
if(out.size() > 0) { print(out); System.out.println(sum(out)); }
for(int i = 0; i < in.size(); i++) {
int item = in.get(i);
in.remove(i);
out.add(item);
permute(in , out);
}
}
public void print(ArrayList<Integer> integer) {
System.out.print("[");
for(int i = 0; i < integer.size(); i++) {
System.out.print(integer.get(i) + ", ");
}
System.out.print("]");
}
public static void main(String[] args) {
ArrayList<Integer> in = new ArrayList<Integer>();
ArrayList<Integer> out = new ArrayList<Integer>();
in.add(1); in.add(2); in.add(3); in.add(4);
Stick stick = new Stick();
stick.permute(in, out);
}
}
【问题讨论】:
-
你能在这里更具体一点吗?当您说“所有可能的变体”时,您是什么意思?我很确定您的意思是从 1 到输入数组长度的所有长度排列,但我不是 100%。
标签: java arrays performance algorithm recursion