我正在尝试制作一个二维数组列表,其中填充了递归的 1,2,3,4 的所有可能组合。
没有加倍。
例如。
1,0,0
2,0,0
3,0,0
4,0,0
1,2,0
1,3,0
1,4,0
1,2,3
等等...
到目前为止我有
//this gives me all my numbers
for(int i =0;i<arraySize;i++)
index[i] = i;
// and is the part that make the combinations
for(int i = 0;i<arraySize;i++){
for(int x = 0;x<k;x++)
combinations.get(i).set(x, index[i]);
编辑:
我也不想打印结果我想将结果存储在二维数组中
最佳答案
您要查找的内容称为 Backtracking 。这种解决问题的技术很大程度上基于递归。基本上,您设置第一个数字,然后只将其他数字视为子问题,当找到第一个数字集的每个排列时,第一个数字就会递增,等等。
您还可以使用直接的 4 个 for 循环来解决问题,但该解决方案不会扩展到 4 个数字以外的任何其他数字。
您的解决方案将类似于以下内容。它将输出 4 个数字的每个排列。
public class PermutationDemo {
public static void main(String[] args) {
int[] array = new int[4];
for (int i=0; i<array.length; i++) {
reset(array, i);
}
solve(array, 0);
}
private static void solve(int[] array, int i) {
if (i == array.length) {
print(array);
return;
}
for (int k=0; k<4; k++) {
solve(array, i+1);
makeMove(array, i);
}
reset(array, i);
}
private static void makeMove(int[] array, int i) {
array[i] += 1;
}
private static void reset(int[] array, int i) {
array[i] = 1;
}
private static void print(int[] array) {
for (int i=0; i<array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println("");
}
}
结果是:
PS [10:21] Desktop > java PermutationDemo
1 1 1
1 1 2
1 1 3
1 1 4
1 2 1
1 2 2
1 2 3
1 2 4
1 3 1
1 3 2
1 3 3
1 3 4
1 4 1
1 4 2
1 4 3
1 4 4
2 1 1
2 1 2
2 1 3
2 1 4
2 2 1
2 2 2
2 2 3
2 2 4
2 3 1
2 3 2
2 3 3
2 3 4
2 4 1
2 4 2
2 4 3
2 4 4
3 1 1
3 1 2
3 1 3
3 1 4
3 2 1
3 2 2
3 2 3
3 2 4
3 3 1
3 3 2
3 3 3
3 3 4
3 4 1
3 4 2
3 4 3
3 4 4
4 1 1
4 1 2
4 1 3
4 1 4
4 2 1
4 2 2
4 2 3
4 2 4
4 3 1
4 3 2
4 3 3
4 3 4
4 4 1
4 4 2
4 4 3
4 4 4
关于java - 二维数组列表的排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19653320/