解题报告: 因为不要用extra space 所以运行时间可能有点高,主要是两个方法, 一个是找出这些零的位置,之后用第二个方法将它的纵和横都改成零。
public class Solution { public void setZeroes(int[][] matrix) { if(matrix == null || matrix.length == 0|| matrix[0].length == 0) return; int m = matrix.length; int n = matrix[0].length; //find which row and which column HashMap> map = new HashMap<>(); for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(matrix[i][j] == 0){ if(!map.containsKey(i)){ ArrayListtemp = new ArrayList<>();
temp.add(j);
map.put(i, temp);
}else{
map.get(i).add(j);
}
}
}
}
for(int i = 0; i < m;i++){
if(map.containsKey(i)){
for(Integer j: map.get(i)){
set(matrix, i, j);
}
}
}
return;
}
private void set(int[][] matrix, int i, int j){
// if(i <= matrix.length || j <= matrix[0].length) return;
if(matrix == null || matrix.length == 0|| matrix[0].length == 0) return;
for(int k = 0; k < matrix[0].length; k++){
matrix[i][k] = 0;
}
for(int l = 0; l < matrix.length; l++){
matrix[l][j] = 0;
}
return;
}
}
网友评论