题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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,col中小的数有关。打印的时候需要判断最后一圈,可能存在,只有一行或一列或一个数的情况。
AC代码:
1 class Solution { 2 public: 3 vector<int> printMatrix(vector<vector<int> > matrix) { 4 vector<int> ans; 5 6 int row=matrix.size(); 7 int col=matrix[0].size(); 8 9 int circle=((row<col?row:col)-1)/2+1; 10 11 12 for(int i=0;i<circle;i++) 13 { 14 for(int j=i;j<col-i;j++) 15 ans.push_back(matrix[i][j]); 16 17 for(int k=i+1;k<row-i;k++) 18 ans.push_back(matrix[k][col-i-1]); 19 20 for(int m=col-i-2;(m>=i)&&(row-i-1!=i);m--) 21 ans.push_back(matrix[row-i-1][m]); 22 23 for(int l=row-i-2;(l>i)&&(col-i-1!=i);l--) 24 ans.push_back(matrix[l][i]); 25 } 26 27 return ans; 28 } 29 };