Problem: 54. 螺旋矩阵
题目描述
思路
定义四个标志top、bottom、left、right标记矩阵的四个方位,依次**从左到右(执行后top++);从上到下(执行后right–);从右到左(执行后bottom–);从左到右(执行后left++)**螺旋遍历并将元素添加到一个二维数组中
复杂度
时间复杂度:
O ( M × N ) O(M \times N) O(M×N);其中 M M M是矩阵的行数 N N N为矩阵的列数
空间复杂度:
O ( M × N ) O(M \times N) O(M×N)
Code
class Solution {
public:
/**
*
* @param matrix Given matrix
* @return vector<int>
*/
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
int top = 0;
int bottom = row - 1;
int left = 0;
int right = col - 1;
vector<int> res;
while (left <= right && top <= bottom) {
//From left to right
for (int i = left; i <= right; ++i) {
res.push_back(matrix[top][i]);
}
top++;
//From top to bottom
for (int i = top; i <= bottom; ++i) {
res.push_back(matrix[i][right]);
}
right--;
//From right to left
for (int i = right; (i >= left && top <= bottom); --i) {
res.push_back(matrix[bottom][i]);
}
bottom--;
//From bottom to top
for (int i = bottom; (i >= top && left <= right); --i) {
res.push_back(matrix[i][left]);
}
left++;
}
return res;
}
};