首页 > 其他 > 详细

螺旋矩阵

时间:2020-09-05 17:46:46      阅读:80      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

//顺时针
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.empty()) return res;
        int left=0,right=matrix[0].size()-1;
        int up=0,down=matrix.size()-1;
        while(true)
        {
            //左-》右
            for(int i=left;i<=right;i++) res.push_back(matrix[up][i]);
            if(++up>down) break;//重新设定边界条件
            //上-》下
            for(int i=up;i<=down;i++) res.push_back(matrix[i][right]);
            if(--right<left) break;
            //右-》左
            for(int i=right;i>=left;i--) res.push_back(matrix[down][i]);
            if(--down<up) break;
            //下-》上
            for(int i=down;i>=up;i--) res.push_back(matrix[i][left]);
            if(++left>right) break;
        }
        return res;
    }
};

//逆时针
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.empty()) return res;
        int left=0,right=matrix[0].size()-1;
        int up=0,down=matrix.size()-1;
        while(true)
        {
            //上-》下
            for(int i=up;i<=down;i++) res.push_back(matrix[i][left]);
            if(++left>right) break;
            //左-》右
            for(int i=left;i<=right;i++) res.push_back(matrix[down][i]);
            if(--down<up) break;//重新设定边界条件
            //下-》上
            for(int i=down;i>=up;i--) res.push_back(matrix[i][right]);
            if(--right<up) break;
            //右-》左
            for(int i=right;i>=left;i--) res.push_back(matrix[up][i]);
            if(++up>down) break;
        }
        return res;
    }
};

//蛇形
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.empty()) return res;
        int left=0,right=matrix[0].size()-1;
        int up=0,down=matrix.size()-1;
        while(true)
        {
            //左-》右
            for(int i=left;i<=right;i++) res.push_back(matrix[up][i]);
            if(++up>down) break;
            //
            for(int i=right;i>=left;i--) res.push_back(matrix[up][i]);
            if(++up>down) break;
            
        }
        return res;
    }
};

 

螺旋矩阵

原文:https://www.cnblogs.com/Sunshineboy1/p/13618732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!