LeetCode 73. 每日一题 · 春季-------week1 --- day4 ---leetcode73. 矩阵置零
原题链接
中等
作者:
初静
,
2021-03-24 22:00:46
,
所有人可见
,
阅读 277
yxc题解
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if (matrix.empty()) return ;
int n = matrix.size(), m = matrix[0].size(); // 注意二维数组求长度方式
int col0 = 1, row0 = 1; //表示第一列和第一行是否需要刷0,非0不刷0
for (int i = 0; i < m; i ++) {
if (!matrix[0][i]) row0 = 0;
}
for (int i = 0; i < n; i ++) {
if (!matrix[i][0]) col0 = 0;
}
// for (int i = 1; i < n; i ++)
// for (int j = 1; j < m; j ++)
// if (!matrix[i][j])
// matrix[i][0] = 0;
// for (int i = 1; i < m; i ++)
// for (int j = 1; j < n; j ++)
// if (!matrix[j][i]) // 不可写成matrix[i][j] 因为i第一维指的是行,而i在这里枚举的是列
// matrix[0][i] = 0;
// 上面的两个for for 可以放在一起写,如下:(且更好理解)
for (int i = 1; i < n; i ++ )
for (int j = 1; j < m; j ++ )
if (!matrix[i][j])
{
matrix[i][0] = 0;
matrix[0][j] = 0;
}
for (int i = 1; i < n; i ++) {
if (!matrix[i][0])
for (int j = 0; j < m; j ++)
matrix[i][j] = 0;
}
for (int i = 1; i < m; i ++) {
if (!matrix[0][i])
for (int j = 0; j < n; j ++)
matrix[j][i] = 0;
}
if (!row0)
for (int i = 0; i < m; i ++) {
matrix[0][i] = 0;
}
if (!col0)
for (int i = 0; i < n; i ++)
matrix[i][0] = 0;
}
};