我在java中有一个数组,改变长度(大约3-5)。现在我想将每个元素的值更改为另一个数组的每个可能元素(newvalues),以便所有组合
我通常只是在循环中执行循环,但在这种情况下,循环的数量由数组的长度定义。所以我很奇怪。举个例子:
ArrayList<Integer> originalList = new ArrayList<Integer>(); \\has varying length
ArrayList<Integer> newvalues = new ArrayList<Integer>();
originalList.add(0);
originalList.add(0);
newvalues.add(1);
newvalues.add(2);
newvalues.add(3);
阵列现在是:
0 0
我想循环使用所有这些来执行操作:
1 1
1 2
1 3
2 1
2 2
2 3
...
我知道这会变成指数级大,但由于原始数组不应该很大,所以应该没问题。
答案 0 :(得分:2)
试试这个。
static void loop(List<Integer> originalList, List<Integer> newvalues, int index) {
if (index >= originalList.size())
System.out.println(originalList);
else {
for (int i = 0; i < newvalues.size(); ++i) {
originalList.set(index, newvalues.get(i));
loop(originalList, newvalues, index + 1);
}
}
}
和
ArrayList<Integer> originalList = new ArrayList<Integer>();
ArrayList<Integer> newvalues = new ArrayList<Integer>();
originalList.add(0);
originalList.add(0);
newvalues.add(1);
newvalues.add(2);
newvalues.add(3);
loop(originalList, newvalues, 0);
结果:
[1, 1]
[1, 2]
[1, 3]
[2, 1]
[2, 2]
[2, 3]
[3, 1]
[3, 2]
[3, 3]
答案 1 :(得分:0)
你确定你真的需要一个排列过的所有值的数组吗?导致由大数组和递归组成的答案的问题几乎总是表明您正在考虑错误的问题。
无论如何,这是你要求的。当我看到这个时,我有点畏缩,因为这段代码有多危险。如果你使用超过微小长度的任何东西,你将很快用完堆和堆栈空间。
/index.html