LeetCode 73. Set Matrix Zeroes
这道题我们采用空间最优的方法,把每行需要变成0的放在行头和列头,需要注意一些细节。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int n = matrix.size();
int h = 0 , l = 0 ;
int m = matrix[0].size();
for( int i = 0 ; i < n; i++ )
for( int j = 0 ; j < m ; j++ )
if(!matrix[i][j])
{
matrix[i][0] = 0 , matrix[0][j] = 0;
if(i == 0 )
l = 1 ;
if(j == 0 )
h = 1;
}
for(int i = 1 ; i < n ; i++ )//两次遍历都是从1开始,因为从0开始会改变行头和列头
if(!matrix[i][0])
for( int j = 1 ; j < m ; j++ )
matrix[i][j] = 0;
for(int j = 1 ; j < m ; j++ )
if(!matrix[0][j])
for(int i = 1 ; i < n ; i++ )
matrix[i][j] = 0 ;
if(l)
for(int i = 0 ; i < m ; i++ )
matrix[0][i] = 0;
if(h)
for(int i = 0 ; i < n ; i++ )
matrix[i][0] = 0;
}
};