【leetcode】【c++】73. 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

 1 # include <vector>
 2 # include <iostream>
 3 
 4 using namespace std;
 5 
 6 void setZeros(vector<vector<int>> & matrix) {
 7     int m = matrix.size();
 8     int n = matrix[0].size();
 9     int flag_col0 = false;  // 标记第一列是否有0
10     for (int i=0; i<m; i++) {
11         if (!matrix[i][0])
12             flag_col0 = true;
13         for (int j=1; j<n; j++) {
14             if (!matrix[i][j])
15                 matrix[i][0] = matrix[0][j] = 0;
16         }
17     }
18     for (int i=m-1; i>=0; i--) {  // 为了避免第一个元素对第一行的影响,从最后一行开始遍历
19         for (int j=1; j<n; j++) {
20             if (!matrix[i][0] || !matrix[0][j])
21                 matrix[i][j] = 0;
22         }
23         if (flag_col0)
24             matrix[i][0] = 0;
25     }
26 }
27 
28 void print(vector<vector<int>> matrix) {
29     int m = matrix.size();
30     int n = matrix[0].size();
31     for (int i=0; i<m; i++) {
32         for (int j=0; j<n; j++) {
33             cout<<matrix[i][j];
34         }
35         cout<<endl;
36     }
37 }
38 
39 int main() {
40     vector<vector<int>> matrix = {{0,1,2,0}, {3,4,5,2}, {1,3,1,5}};
41     setZeros(matrix);
42     print(matrix);
43 }
44 
45 // 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

 

posted @ 2021-11-16 10:29  AliceYing  阅读(212)  评论(0)    收藏  举报