【LeetCode-陣列】矩陣置零
阿新 • • 發佈:2020-07-09
題目描述
給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。
示例:
輸入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
輸出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
題目連結: https://leetcode-cn.com/problems/set-matrix-zeroes/
思路
首先記錄下所有 0 的位置放在佇列裡,然後根據這些位置來將位置所在的行列置零。程式碼如下:
class Solution { public: void setZeroes(vector<vector<int>>& matrix) { int m = matrix.size(); int n = matrix[0].size(); queue<pair<int, int>> q; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(matrix[i][j]==0) q.push(make_pair(i, j)); } } while(!q.empty()){ int row = q.front().first; int col = q.front().second; q.pop(); /*int t = i; while(t>=0) matrix[t--][j] = 0; t = i; while(t<m) matrix[t++][j] = 0; t = j; while(t>=0) matrix[i][t--] = 0; t = j; while(t<n) matrix[i][t++] = 0;*/ for(int i=0; i<n; i++) matrix[row][i] = 0; for(int i=0; i<m; i++) matrix[i][col] = 0; } } };
- 時間複雜度:O(m x n)
最壞情況下。 - 空間複雜度:O(m x n)
最壞情況下。