螺旋矩阵

螺旋矩阵
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入

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

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

算法思想:由于传入一个二维数组,可以定义四个边界,依次循环走,注意处理边界条件

代码:

class Solution {
public:
     
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        vector<int>vec;
        if(matrix.size() == 0)return vec;
        int up = 0,down = matrix.size()-1,left = 0,right = matrix[0].size()-1;
        while(true)
        {
            for(int i = left;i<=right;++i){vec.push_back(matrix[up][i]);}//左到右的第一行
            up++;//跳到下一行
            if(up > down)break;//判断
            for(int i = up;i<=down;++i){vec.push_back(matrix[i][right]);}//上到下一列
            right--;//跳到前一列开始
            if(right<left)break;
            for(int i = right;i>=left;--i){vec.push_back(matrix[down][i]);}//右到左的一行
            down--;//跳到上一行
            if(down < up)break;
            for(int i = down;i >= up;--i){vec.push_back(matrix[i][left]);}//下到上的一列
            left++;//在进入下一次循环
            if(left > right)break;
        }
        
        return vec;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值