LeetCode: Spiral Matrix

本文介绍了一种螺旋遍历二维矩阵的方法,通过控制遍历的方向和层级,依次按顺时针螺旋顺序访问矩阵中的所有元素。算法实现了从左至右、从上至下、从右至左再到从下至上逐层遍历矩阵的功能。

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

思路:先计算好需要遍历多少层,每一层遍历四个方向,先从左往右,然后从上往下,然后从右往左,最后从下往上,所有层数都这样遍历,遍历过程中设计一个计数器,如果遍历完所有的元素,则跳出循环。

code:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        vector<int> ret;
        if(matrix.empty())return ret;
        
        int nRow = matrix.size(), nCol = matrix[0].size();
        
        int layer = min(nRow,nCol) / 2+1, num = 0;
        for(int iLayer = 0;iLayer < layer;iLayer++){
            for(int j = iLayer;j < nCol - iLayer;j++)
                ret.push_back(matrix[iLayer][j]);
            num += (nCol - 2*iLayer ); 
            if(num >= nRow*nCol)break;
            
            for(int i = iLayer+1;i<nRow - iLayer -1;i++)
                ret.push_back(matrix[i][nCol - iLayer -1]);
            num += (nRow - 2*iLayer -2); 
            if(num >=nRow*nCol)break;
            
            for(int j = nCol - iLayer -1;j >= iLayer;j--)
                ret.push_back(matrix[nRow - iLayer-1][j]);
            num += (nCol - 2*iLayer); 
            if(num >= nRow*nCol)break;
                
            for(int i = nRow - iLayer -2;i >= iLayer+1;i--)
                ret.push_back(matrix[i][iLayer]);
            num += (nRow - 2*iLayer -2); 
            if(num >= nRow*nCol)break;
        }
        return ret;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值