螺旋矩阵(NC38/考察次数Top27/难度入门)

描述:
给定一个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来使用,此处为定义函数
        vector<int> result;                                  //定义一个与函数同类型的变量用来作为函数的返回值
        if(matrix.size()==NULL)
        {
            return result;
        }
        int i, left=0, right=matrix[0].size()-1, top=0, down=matrix.size()-1;       //定义一下左、右以及上、下的边界线
        while(left<=right&&top<=down){                                              //循环进行的条件

            for(i=left;i<=right;i++)
                result.push_back(matrix[top][i]);      //将top排数据pash_back到result里面(注意vector使用push_back插入)
            top++;                                     //插值完后,top++
            for(i=top;i<=down;i++)
                result.push_back(matrix[i][right]);    //将right排数据push_back到result里面
            right--;                                   //插值完后right--           
            //内部循环进行时其实都是满足条件的,只是上面
            //进行了top++,right--的操作,为了防止同排或者同列处理两次,需要进行判断
            if(top<=down)                              //条件判断,防止同排算入两次
            for(i=right;i>=left;i--)
                result.push_back(matrix[down][i]);     //将down排数据push_back到result里面
            down--;                                    //插值完后down--
            if(left<=right)                            //条件判断,防止同列算入两次
            for(i=down;i>=top;i--)
                result.push_back(matrix[i][left]);     //将left排数据push_back到result里面
            left++;                                    //插值完后进行left++
        }
        return result;
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值