class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if(matrix.size() ==0 || matrix[0].size() == 0)
return;
int row = matrix.size(), col = matrix[0].size();
int x = -1, y = -1;
int i = 0, j = 0;
//找到第一个0出现的位置,记录为(x,y)
for(i = 0;i<row;i++)
{
for(int j = 0;j<col;j++)
{
if(matrix[i][j] == 0)
{
x = i;
y = j;
break;
}
}
}
if(x == -1 && y == -1)
return;
//把第x行和第y列作为可用的空间,搜索遍历每一行和每一列,把第x行和第y列作为标记位来存储。
//搜索每一行
for(i = 0;i<row;i++)
{
if( i != x)
for(j = 0;j<col;j++)
{
if(matrix[i][j] == 0)
{
matrix[i][y] = 0;
break;
}
}
}
//搜索每一列
for(j = 0;j<col;j++)
{
if(j != y)
{
for(i = 0;i<row;i++)
{
if(matrix[i][j] == 0)
{
matrix[x][j] = 0;
break;
}
}
}
}
//将标记位为0的所有行赋值为0
for(i = 0;i<row;i++)
{
if(i == x)
continue;
if(matrix[i][y] == 0)
{
//设置这一行都为0
for(j = 0;j<col;j++)
{
matrix[i][j] = 0;
}
}
else
matrix[i][y] = 0;
}
//将标记位为0的所有列赋值为0
for(j = 0;j<col;j++)
{
if(j == y)
continue;
if(matrix[x][j] == 0)
{
for(i = 0;i<row;i++)
matrix[i][j] = 0;
}
else
matrix[x][j] = 0;
}
//最后将使用的标记位赋值为0
for(j = 0;j<col;j++)
matrix[x][j] = 0;
for(i = 0;i<row;i++)
matrix[i][y] = 0;
}
};
LeetCode || Set Matrix Zeroes
最新推荐文章于 2024-05-12 22:12:37 发布