您的位置:首页 > 其它

LeetCode No.73 SetMatrixZeroes

2017-03-15 20:03 423 查看
//Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return;
int m = matrix.length, n = matrix[0].length;
boolean row = false, col = false;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
if (matrix[i][j] == 0) {
matrix[0][j] = 0;
matrix[i][0] = 0;
if (i == 0) row = true;
if (j == 0) col = true;

}
}
}
for (int i = 1; i < m; i++){
if (matrix[i][0] == 0){
for (int j = 1; j < n;j++)
matrix[i][j] = 0;
}
}
for (int j = 1; j < n; j++){
if (matrix[0][j] == 0){
for (int i = 1; i < m; i++)
matrix[i][j] = 0;
}
}
if (row){
for (int j = 0; j < n; j++)
matrix[0][j] = 0;
}
if (col){
for(int i = 0; i < m; i++)
matrix[i][0] = 0;
}

//too slow
public void setZeros(int[][] matrix){
int rows = matrix.length;
int cols = matrix[0].length;
Set<Integer> a = new HashSet<Integer>();
Set<Integer> b = new HashSet<Integer>();

for(int i = 0;i<rows;i++){
for(int j = 0;j<cols;j++){
if (matrix[i][j]==0){
a.add(i);
b.add(j);
}
}

}

for(int i = 0;i<rows;i++){
for(int j = 0;j<cols;j++) {
if(a.contains(i)){
matrix[i][j] = 0;
}
if(b.contains(j)){
matrix[i][j] = 0;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode