LeetCode #54 - Spiral Matrix

本文介绍了一种螺旋遍历矩阵的算法实现,通过定义四个边界来确定待遍历的矩阵范围,并按顺时针方向依次遍历矩阵的右侧、底部、左侧和顶部,直至遍历完整个矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].


按照顺时针螺旋形遍历矩阵定义四个变量分别表示当前未遍历对子矩阵对上下左右边界,每次遍历则进行右->下->左->上四次循环,将遍历的元素加入结果中,同时调整上下左右边界,循环的条件是左边界小于等于右边界,上边界小于等于下边界。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> result;
        if(matrix.size()==0||matrix[0].size()==0) return result;
        
        int m=matrix.size();
        int n=matrix[0].size();
        int right_bottom=n-1;
        int left_bottom=0;
        int down_bottom=m-1;
        int up_bottom=0;
        while(left_bottom<=right_bottom&&up_bottom<=down_bottom)
        {
            //right
            for(int i=left_bottom;i<=right_bottom;i++) result.push_back(matrix[up_bottom][i]);
            up_bottom++;
            //down
            for(int i=up_bottom;i<=down_bottom;i++) result.push_back(matrix[i][right_bottom]);
            right_bottom--;
            //left,之前对up_bottom有修改,可能会超过down_bottom
            if(up_bottom<=down_bottom)
            {
                for(int i=right_bottom;i>=left_bottom;i--) result.push_back(matrix[down_bottom][i]);
                down_bottom--;
            }
            //up,之前对right_bottom有修改,可能会超过left_bottom
            if(left_bottom<=right_bottom)
            {
                for(int i=down_bottom;i>=up_bottom;i--) result.push_back(matrix[i][left_bottom]);
                left_bottom++;
            }
        }
        return result;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值