Given a m x n matrix,
if an element is 0, set its entire row and column to 0. Do it in place.
1. A straight forward solution using O(mn)
space is probably a bad idea.
2. A simple improvement uses O(m + n)
space, but still not the best solution.
Similar to the second solution, instead of using extra space, we could just use the first column and the first row to record the information whether the col or row need to be set to 0 or not
Code:
public class Solution {
// using O(m+n) is easy, to enable O(1), we have to use the space within the matrix
public void setZeroes(int[][] matrix) {
if(matrix == null || matrix.length == 0)
return;
int rows = matrix.length;
int cols = matrix[0].length;
boolean empty_row0 = false;
boolean empty_col0 = false;
for(int i = 0; i < cols; i++){
if(matrix[0][i] == 0){
empty_row0 = true;
break;
}
}
for(int i = 0; i < rows; i++){
if(matrix[i][0] == 0){
empty_col0 = true;
break;
}
}
for(int i = 1; i < rows; i++) {
for(int j =1; j<cols; j++){
if(matrix[i][j] == 0){
matrix[0][j] = 0;
matrix[i][0] = 0;
}
}
}
for(int i = 1; i<rows; i++) {
for (int j=1; j< cols; j++) {
if(matrix[0][j] == 0 || matrix[i][0] == 0)
matrix[i][j] = 0;
}
}
if(empty_row0){
for(int i = 0; i < cols; i++){
matrix[0][i] = 0;
}
}
if(empty_col0){
for(int i = 0; i < rows; i++){
matrix[i][0] = 0;
}
}
}
}
矩阵零填充算法
本文介绍了一种高效的矩阵零填充算法,该算法能够在不使用额外空间的情况下将矩阵中元素为0的整行和整列设置为0。通过利用矩阵的第一行和第一列来记录哪些行和列需要被设置为0,从而实现了空间复杂度从O(m+n)到O(1)的优化。
417

被折叠的 条评论
为什么被折叠?



