我有一个像这样的二维数组:
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 个嵌套循环。
变量 i 遍历行。
变量 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;
}
}
}
}
关于java - 移动二维矩阵中的所有零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094400/