剑指offer面试题[20]-顺时针打印矩阵

来源:互联网 发布:windows命令行解压zip 编辑:程序博客网 时间:2024/05/21 21:01

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {            int row=matrix.size();            int col=matrix[0].size();            if(row==0&&col==0)                return matrix[0];            int start=0;            vector<int> result;            while(row>start*2&&col>start*2)   //每一个圈占用两行,画图分析              {                 int endx=col-1-start;                 int endy=row-1-start;                 //从左往右打印当前圈的第一行                 for(int i=start;i<=endx;i++)                     result.push_back(matrix[start][i]);                 //从上往下打印                 if(start<endy)                   {  for(int i=start+1;i<=endy;i++)    //start+1是因为上面从左往右已经把matrix[start][endx]打印了                         result.push_back(matrix[i][endx]);                   }                 //从右往左打印                 if(start<endx&&start<endy)    //必须起始的行和列均大于剩余行和列                   {  for(int i=endx-1;i>=start;i--)                            result.push_back(matrix[endy][i]);                   }                 //从下往上打印                 if(start<endx&&start<endy-1)    //必须起始的行和列均大于剩余行和列                   {  for(int i=endy-1;i>=start+1;i--)    //start+1是因为上面从左往右已经把matrix[start][endx]打印了                         result.push_back(matrix[i][start]);                   }                 start++;              }        return result;    }};


原创粉丝点击