1. 题目来源
链接:73. 矩阵置零
2. 题目解析
纯思维题,采用退而求其次的方式来曲线救国很不错。
用第一行、第一列变量来表示本列、行是否有 0。这样最后在恢复的时候就是独立的了。
- 时间复杂度: O ( n 2 ) O(n^2) O(n2)。
- 空间复杂度: O ( 1 ) O(1) O(1)
代码:
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int n = matrix.size(), m = matrix[0].size();
if (!n || !m) return ;
int r0 = 1, c0 = 1;
for (int i = 0; i < m; i ++ ) if (!matrix[0][i]) r0 = 0;
for (int i = 0; i < n; i ++ ) if (!matrix[i][0]) c0 = 0;
for (int i = 1; i < m; i ++ )
for (int j = 1; j < n; j ++ )
if (!matrix[j][i])
matrix[0][i] = 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 < n; i ++ )
if (!matrix[i][0])
for (int j = 1; j < m; j ++ )
matrix[i][j] = 0;
for (int i = 1; i < m; i ++ )
if (!matrix[0][i])
for (int j = 1; j < n; j ++ )
matrix[j][i] = 0;
if (!r0) for (int i = 0; i < m; i ++ ) matrix[0][i] = 0;
if (!c0) for (int i = 0; i < n; i ++ ) matrix[i][0] = 0;
}
};