力扣54:螺旋矩阵
力扣54:螺旋矩阵
- 题目
- 思路
- 代码
题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路
思路很简单创建一个二维数组然后按照箭头所示的顺序一层一层的给二维数组相应的位置赋值即可。难点是我们是一层一层的赋值也就是先把最外层一圈的数赋值,再来内层一圈的,所以我们需要定义左边界右边界上边界和下边界四个值,每完成一行或一列的赋值就需要将对应的边界进行++或–。
代码
class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> v;int m = matrix.size(); // 行int n = matrix[0].size(); // 列int left = 0; // 最左列int right = n - 1; // 最右列int top = 0; // 顶行int bottom = m - 1; // 底行while (left <= right && top <= bottom) {// 从左到右for (int i = left; i <= right; i++) {// 列数在变v.push_back(matrix[top][i]);}top++;// 从上到下for (int i = top; i <= bottom; i++) {// 行数在变v.push_back(matrix[i][right]);}right--;// 从右往左if (top <= bottom) {for (int i = right; i >= left; i--) {// 列数在变v.push_back(matrix[bottom][i]);}}bottom--;// 从下往上if (left <= right) {for (int i = bottom; i >= top; i--) {// 行数在变v.push_back(matrix[i][left]);}}left++;}return v;}
};