【力扣】54.螺旋矩阵

AC截图

题目

思路

假如矩阵有m行n列,用一个变量total=m*n记录矩阵元素是否访问完毕。

使用四个变量,rowBegin=0,rowEnd=m-1,colBegin=0,colEnd=n-1记录四个边界,然后按照从左到右、从上到下、从右到左、从下到上依次遍历循环,每次修改边界条件直至遍历结束。

代码

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;

        int m=matrix.size();
        int n=matrix[0].size();

        int rowBegin=0,rowEnd=m-1;
        int colBegin=0,colEnd=n-1;
        int total=m*n;
        while(total>0){
            // 从左到右
            for(int i=colBegin;i<=colEnd&&total>0;i++){
                res.push_back(matrix[rowBegin][i]);
                total--;
            }
            rowBegin++;

            // 从下到上
            for(int i=rowBegin;i<=rowEnd&&total>0;i++){
                res.push_back(matrix[i][colEnd]);
                total--;
            }
            colEnd--;

            // 从右到左
            for(int i=colEnd;i>=colBegin&&total>0;i--){
                res.push_back(matrix[rowEnd][i]);
                total--;
            }
            rowEnd--;

            // 从下到上
            for(int i=rowEnd;i>=rowBegin&&total>0;i--){
                res.push_back(matrix[i][colBegin]);
                total--;
            }
            colBegin++;
        }

        return res;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值