本文主要是介绍73. Set Matrix Zeros,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
解答:
提供了两种解题思路:
第一种,使用两个数组,分别标记每一行、每一列是否有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)
这篇关于73. Set Matrix Zeros的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!