【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]]

浙公网安备 33010602011771号