[LeetCode] 矩陣置零
阿新 • • 發佈:2018-12-11
給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 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] ]
進階:
- 一個直接的解決方案是使用 O(mn) 的額外空間,但這並不是一個好的解決方案。
- 一個簡單的改進方案是使用 O(m + n) 的額外空間,但這仍然不是最好的解決方案。
- 你能想出一個常數空間的解決方案嗎?
class Solution { public: void setZeroes(vector<vector<int>>& matrix) { if(matrix.empty() || matrix[0].empty()) return; int m = matrix.size(),n = matrix[0].size(); bool col = false,row = false; for(int i = 0;i < m; i++){ if(matrix[i][0] == 0) col = true; } for(int k = 0;k<n;k++){ if(matrix[0][k] == 0) row = true; } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(matrix[i][j] == 0){ matrix[i][0]=0; matrix[0][j]=0; } } } for(int i=1;i<m;++i){ for(int j=1;j<n;++j){ if(matrix[i][0] == 0 || matrix[0][j] == 0 ) matrix[i][j] =0; } } if(col) for(int i=0;i<m;i++) matrix[i][0] = 0; if(row) for(int j=0;j<n;j++) matrix[0][j] = 0; } };