1 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
雙嵌套循環(huán)應(yīng)該在這里工作。請(qǐng)注意,您要求的輸出實(shí)際上是一個(gè) 3D 數(shù)組(2D 數(shù)組的數(shù)組):
public int[][] copy2DArray (int[][] input) {
int[][] output = new int[input.length][];
for (int r=0; r < input.length; ++r) {
output[r] = new int[input[r].length];
for (int c=0; c < input[0].length; ++c) {
output[r][c] = input[r][c];
}
}
return output;
}
public static void main(String[] args) {
int [][] a = { {0,1,0},{1,2,1},{1,0,0},{0,2,0} };
int numSwaps = a.length*(a.length-1) / 2;
int[][][] result = new int[numSwaps][][];
int counter = 0;
for (int i=0; i < a.length-1; ++i) {
for (int j=i+1; j < a.length; ++j) {
result[counter] = copy2DArray(a);
int[] temp = result[counter][j];
result[counter][j] = result[counter][i];
result[counter][i] = temp;
++counter;
}
}
System.out.println(Arrays.deepToString(result));
}
這打?。?/p>
[
[[1, 2, 1], [0, 1, 0], [1, 0, 0], [0, 2, 0]],
[[1, 0, 0], [1, 2, 1], [0, 1, 0], [0, 2, 0]],
[[0, 2, 0], [1, 2, 1], [1, 0, 0], [0, 1, 0]],
[[0, 1, 0], [1, 0, 0], [1, 2, 1], [0, 2, 0]],
[[0, 1, 0], [0, 2, 0], [1, 0, 0], [1, 2, 1]],
[[0, 1, 0], [1, 2, 1], [0, 2, 0], [1, 0, 0]]
]
對(duì)于某些注釋,我過去使用的策略是使用兩級(jí)循環(huán)遍歷所有位置交換位置for。對(duì)于每個(gè)可能的交換,我們首先克隆您的輸入二維a數(shù)組。然后,我們?cè)谶x擇的任何位置交換各個(gè)一維數(shù)組。最后,我們將該交換數(shù)組添加到 3D 結(jié)果數(shù)組。我們也可以使用類似列表的東西來存儲(chǔ)交換的二維數(shù)組。
添加回答
舉報(bào)