我有一个像这样的二维数组:
2 0 0 2 0 4
2 0 0 2 0 4
2 0 0 2 0 4
我想将所有零向左移动,因此我做了以下方法:
public static void shiftLeft(int [][] array){
for (int j = 0; j < array.length; j++) {
for (int i = 0; i < array.length - 1; i++) {
if ((array[j][i] != 0) && (array[j][i + 1] == 0)) {
array[j][i + 1] = array[j][i];
array[j][i] = 0;
}
}
}
}
但是我得到的输出是这样的:
0 0 2 0 2 4
0 0 2 0 2 4
0 0 2 0 2 4
我怎样才能使所有零都向左移动?
最佳答案
在我看来,最简单的方法是使用3个嵌套循环。
变量和遍历行。
变量 j1 查找从每行左侧开始的第一个非零元素。
变量 j2 查找 j1 之后的第一个零元素,并交换它们。
以下代码假定将二维矩阵A声明为 A [N] [M] ,其中N和M分别是行数和列数。
for(int i =0;i<N;i++){
for(int j1=0;j1<M;j1++){
if (A[i][j1]==0)
continue;
for(int j2=j1;j2<M;j2++){
if( A[i][j2]==0){
//swap
int tmp=A[i][j1];
A[i][j1]=A[i][j2];
A[i][j2]=tmp;
}
}
}
}