17,顺时针打印矩阵《剑指Offer》
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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) { vector<int> res; int top=0; int bottom=matrix.size()-1; int left=0; int right=matrix[0].size()-1; while(left<right&&top<bottom){ //left--->right for(int i=left;i<=right;i++){ res.push_back(matrix[top][i]); } top++; //top--->bottom for(int i=top;i<=bottom;i++){ res.push_back(matrix[i][right]); } right--; //right--->left for(int i=right;i>=left;i--){ res.push_back(matrix[bottom][i]); } bottom--; //bottom->top for(int i=bottom;i>=top;i--){ res.push_back(matrix[i][left]); } left++; } //执行到这里只有几种情况: //1:left==right top!=bottom 一列或没有 //2:top==bottom left!=right 一行或没有 //left==right==top==bottom 只有一个 if(left==right&&top!=bottom){ for(int i=top;i<=bottom;i++){ res.push_back(matrix[i][left]); } } if(top==bottom){ for(int i=left;i<=right;i++){ res.push_back(matrix[top][i]); } } return res; } };