LeetCode 面试题01.08 零矩阵
题目描述
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
【示例 1】
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
【示例 2】
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
解题
思路很简单,第一遍遍历记录好原矩阵中0元素出现的行和列,第二遍遍历根据记录的行和列对元素赋0。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int raw = matrix.size(), col;
if (raw)
col = matrix[0].size();
else
return;
vector<bool> raw_flag(raw, 0), col_flag(col, 0);
for (int i=0; i<raw; ++i){
for (int j=0; j<col; ++j){
if (matrix[i][j])
continue;
raw_flag[i] = 1;
col_flag[j] = 1;
}
}
for (int i=0; i<raw; ++i){
for (int j=0; j<col; ++j){
if (raw_flag[i] || col_flag[j])
matrix[i][j] = 0;
}
}
}
};