I am making an ArrayList
, keeping note of all the indices where zero has occurred. Later on, I am taking out the indices from ArrayList
and making the corresponding row and column to zero.
Please suggest improvement and the better ways to do it in place.
public void setZeroes(int[][] matrix) {
if(matrix.length == 0 ) {
return;
}
if(matrix.length == 1) {
boolean flag = false;
for(int j =0; j<matrix[0].length; j++) {
if(matrix[0][j] == 0){
flag = true;
break;
}
}
if(flag) {
for(int j =0; j<matrix[0].length; j++) {
matrix[0][j] = 0;
}
}
return;
}
ArrayList<MyHelperClass> zeroList = new ArrayList<>();
int m = matrix.length;
int n = matrix[0].length;
for(int i =0; i<m; i++) {
for(int j =0; j<n; j++) {
if(matrix[i][j] == 0) {
MyHelperClass mh = new MyHelperClass(i, j);
zeroList.add(mh);
}
}
}
Iterator ie = zeroList.iterator();
while(ie.hasNext()) {
MyHelperClass mh2 = (MyHelperClass) ie.next();
int x = mh2.x;
int y = mh2.y;
for(int j =0; j<n; j++) {
matrix[x][j] = 0;
//matrix[i][y] = 0;
}
for(int i =0; i<m; i++) {
matrix[i][y] = 0;
//matrix[i][y] = 0;
}
}
}
private static class MyHelperClass {
int x;
int y;
public MyHelperClass(int x, int y){
this.x = x;
this.y = y;
}
}