题解 | #螺旋矩阵#

螺旋矩阵

https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

#include <vector>
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        vector<int> res;
        int m=matrix.size();
        int n=matrix[0].size();
        if (m==0) { //特殊情况处理
            return res;
        }
        int top=0,left=0,right=n,bottom=m,max=m*n,cur=1;//定义四个边界值,同时需要遍历的次数cur计数
        int row=0,col=0,begin=0;

        vector<pair<int,int>> dir={{0,1},{1,0},{0,-1},{-1,0}};//定义螺旋方向 右,下,左,上
        while (cur<=max) {
            res.push_back(matrix[row][col]);//
            int newrow=row+dir[begin].first;
            int newcol=col+dir[begin].second;
            if(newrow<top||newrow>=bottom||newcol<left||newcol>=right){//对下一个可能的方向进行判断
                switch (begin) {//先判断再修改边界使其不断缩小
                    case 0:
                        top++;
                        break;
                    case 1:
                        right--;
                        break;
                    case 2:
                        bottom--;
                        break;
                    case 3:
                        left++;
                        break;
                }
                begin=(begin+1)%4;
            }
            //新的 行值 与 列值
            cur++;
            row+=dir[begin].first;
            col+=dir[begin].second;
        }
        return res;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:29
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务