
目錄
- 矩陣
- 矩陣置零
- 螺旋矩陣
- 旋轉圖像
- 搜索二維矩陣 II
矩陣
矩陣置零
- 矩陣置零
用兩個數組分別標記行和列,判斷這一行和這一列有沒有出現0。
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size();vector<int> row(m), col(n);for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (matrix[i][j] == 0){row[i] = 1;col[j] = 1;}}}for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (row[i] || col[j]){matrix[i][j] = 0;}}} }
};
螺旋矩陣
- 螺旋矩陣
用方向數組來轉換方向,當遇到邊界、或這個位置已經遍歷過了,就是變換方向的時候。
class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int m = matrix.size(), n = matrix[0].size();vector<vector<bool>> used(m, vector<bool>(n));vector<int> res(m * n);int a = 0, b = 0, d = 1;for (int i = 0; i < m * n; i++){used[a][b] = true;res[i] = matrix[a][b];int x = a + dx[d], y = b + dy[d];if (x < 0 || x == m || y < 0 || y == n || used[x][y]){d = (d + 1) % 4;x = a + dx[d], y = b + dy[d];}a = x, b = y;}return res;}
};
旋轉圖像
- 旋轉圖像
純純找規律題。先正對角線交換,然后逐行反轉。
class Solution {
public:void rotate(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size();for (int i = 0; i < m; i++){for (int j = 0; j < i; j++){swap(matrix[i][j], matrix[j][i]);}}for (int i = 0; i < m; i++){reverse(matrix[i].begin(), matrix[i].end());} }
};
搜索二維矩陣 II
- 搜索二維矩陣 II
仔細觀察發現,從右上角看這個矩陣近似一個搜索二叉樹,那就可以像查找二叉搜索樹那樣查找目標值。
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size(), n = matrix[0].size();int x = 0, y = n - 1;while (x < m && y >= 0){if (target < matrix[x][y]) y--;else if (target > matrix[x][y]) x++;else return true;}return false;}
};
本篇文章的分享就到這里了,如果您覺得在本文有所收獲,還請留下您的三連支持哦~
