LeetCode 73.Set Matrix Zeroes (矩陣置零)
阿新 • • 發佈:2018-12-12
題目描述:
給定一個 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] ]
AC C++ Solution:
class Solution { public: void setZeroes(vector<vector<int> > &matrix) { int col0 = 1, rows = matrix.size(), cols = matrix[0].size(); //用col0記錄第一列的情況 for (int i = 0; i < rows; i++) { //將每行每列的狀態儲存到行和列的開頭 if (matrix[i][0] == 0) col0 = 0; for (int j = 1; j < cols; j++) if (matrix[i][j] == 0) matrix[i][0] = matrix[0][j] = 0; } for (int i = rows - 1; i >= 0; i--) { for (int j = cols - 1; j >= 1; j--) if (matrix[i][0] == 0 || matrix[0][j] == 0) //根據行首和列首的狀態設定每個位置的狀態 matrix[i][j] = 0; if (col0 == 0) matrix[i][0] = 0; } } };
這種解法必須注意要用單獨的一個標誌記錄行首或者列首的情況,並且不能用(0,0)來記錄。不然到後面根據行首或者列首狀態來設定某位時不知道(0,0)點到底是根據行還是列的狀態設定的。