题目:
解答:
提供了两种解题思路:
第一种,使用两个数组,分别标记每一行、每一列是否有0的存在,然后再去更新二维数组。
第二种,使用两个变量brow,bcol分别标记第0行,第0列是否存在0,然后使用每一行、每一列的第一个单元存储是否该行、该列存在0.
代码:
class Solution {
public:
// 方法一
void setZeroes(vector<vector<int>>& matrix) {
if(matrix.empty()) return;
int row = matrix.size(), col = matrix[0].size();
vector<int> vecrow(row,0);
vector<int> veccol(col,0);
for(int i = 0;i < row; ++i){
for(int j = 0;j < col; ++j){
if(matrix[i][j] == 0){
vecrow[i] = 1;
break;
}
}
}
for(int i = 0;i < col; ++i){
for(int j = 0;j < row; ++j){
if(matrix[j][i] == 0){
veccol[i] = 1;
break;
}
}
}
for(int i = 0;i < row; ++i){
for(int j = 0;j < col; ++j){
if(vecrow[i] || veccol[j])
matrix[i][j] = 0;
}
}
return ;
}
// 方法二
void setZeroes(vector<vector<int>>& matrix) {
int row = matrix.size(), col = matrix[0].size();
bool brow0 = false, bcol0 = false;
for(int i = 0;i < row; ++i){
if(matrix[i][0] == 0){
brow0 = true;
break;
}
}
for(int i = 0;i < col; ++i){
if(matrix[0][i] == 0){
bcol0 = true;
break;
}
}
for(int i = 1;i < row; ++i){
for(int j = 1;j < col; ++j){
if(matrix[i][j] == 0){
matrix[i][0] = 0;
break;
}
}
}
for(int i = 1;i < col; ++i){
for(int j = 1;j < row; ++j){
if(matrix[j][i] == 0){
matrix[0][i] = 0;
break;
}
}
}
for(int i = 1;i < row; ++i){
for(int j = 1;j < col; ++j){
if(matrix[i][0] == 0 || matrix[0][j] == 0)
matrix[i][j] = 0;
}
}
cout << brow0 << " " << bcol0 << endl;
if(brow0){
for(int i = 0;i < row; ++i){
matrix[i][0] = 0;
}
}
if(bcol0){
for(int i = 0;i < col; ++i){
matrix[0][i] = 0;
}
}
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)