LeetCode 刷题【54. 螺旋矩阵】

发布于:2025-09-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

54. 螺旋矩阵

自己做

解:螺旋遍历

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int m = matrix.size();                              //行数
        int n = matrix[0].size();                           //列数
        int sum = m * n;                                    //总数m * n

        int top = 0;                                        //上边界
        int bottom = m - 1;                                 //下边界
        int left = 0;                                       //左边界
        int right = n - 1;                                  //右边界

        vector<int> res;                                    //存放结果

        int i = 0;
        while (1) {
            //==========================从左往右,抵达右边界前,向右遍历==========================
            for (int j = left; j <= right; j++) {
                res.push_back(matrix[top][j]);
                i++;
            }
            top++;                      //上边界往下压

            //一条线走完判断是否已经遍历完了整个矩阵
            if (i == sum)
                break;

            //==========================从上往下,抵达下边界前,向下遍历==========================
            for (int j = top; j <= bottom; j++) {
                res.push_back(matrix[j][right]);
                i++;
            }
            right--;                      //右边界往左移

            //一条线走完判断是否已经遍历完了整个矩阵
            if (i == sum)
                break;

            //==========================从右往左,抵达左边界前,向左遍历==========================
            for (int j = right; j >= left; j--) {
                res.push_back(matrix[bottom][j]);
                i++;
            }
            bottom--;                      //下边界往上抬

            //一条线走完判断是否已经遍历完了整个矩阵
            if (i == sum)
                break;

            //==========================从下往上,抵达上边界前,向上遍历==========================
            for (int j = bottom; j >= top; j--) {
                res.push_back(matrix[j][left]);
                i++;
            }
            left++;                      //左边界往右动

            //一条线走完判断是否已经遍历完了整个矩阵
            if (i == sum)
                break;
        }

        return res;

    }
};


网站公告

今日签到

点亮在社区的每一天
去签到