給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。
思路:
1、讓首行首列記錄哪一行哪一列有0
2、于是可以直接遍歷非首行首列的元素,若該元素對應的首行首列為0,說明該元素最后還是需要置0
3、由于首行首列還需要記錄哪一行哪一列有0,所以第1步和第2步可能會有沖突,于是加入兩個bool量,標志首行首列是否有0
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int m = matrix.size(); // 行數if(m==0)return;int n = matrix[0].size(); // 列數bool row = false, col = false;// 先完成標記首行首列是否有0// 檢查首列是否有0for(int i=0; i<m; i++){if(matrix[i][0] == 0){col = true;break;} }// 檢查首行是否有0for(int j=0; j<n; j++){if(matrix[0][j] == 0){row = true;break;}}// 完成第一步for(int i=1; i<m; i++){for(int j=1; j<n; j++){if(matrix[i][j] == 0){// 首行首列置0matrix[0][j] = 0;matrix[i][0] = 0;}}}// 完成第二步for(int i=1; i<m; i++){for(int j=1; j<n; j++){if(matrix[0][j]==0 || matrix[i][0] == 0){matrix[i][j] = 0;}}}// 處理有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;}}}
};