剑指offer 顺时针打印矩阵

来源:互联网 发布:计价软件怎么用 编辑:程序博客网 时间:2024/05/29 04:07

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.


解题思路:这是一个回形矩阵问题,每次一个回形就是一个右,下,左,上,走完一圈,那么回形矩阵row-2,col-2,注意一定走完一次特判一次。。

代码:

class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix){        vector<int>ans;        ans.clear();        int len_x = matrix[0].size();        int len_y = matrix.size();        int cnt = len_x*len_y;        int x,y;        x=y=0;        while(cnt)        {            ans.push_back(matrix[x][y]);        cnt--;         for(int i=0;i<len_x-1;i++)        {            cnt--;            y++;            ans.push_back(matrix[x][y]);          }            if(!cnt) break;        for(int i=0;i<len_y-1;i++)        {            cnt--;            x++;            ans.push_back(matrix[x][y]);        }            if(!cnt) break;        for(int i=0;i<len_x-1;i++)        {            cnt--;            y--;            ans.push_back(matrix[x][y]);        }            if(!cnt) break;        for(int i=0;i<len_y-2;i++)        {            cnt--;            x--;            ans.push_back(matrix[x][y]);        }            if(cnt==0)  break;            y++;            len_x = len_x-2;            len_y = len_y-2;            if(len_x<=0||len_y<=0)  break;        }        return ans;    }};