题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> v; if(matrix.empty()) return v; int rows=matrix.size(); int cols=matrix[0].size(); int left=0,right=cols-1,top=0,bottom=rows-1; while(left<=right && top<=bottom){ for(int i=left;i<=right;++i) v.push_back(matrix[top][i]); for(int i=top+1;i<=bottom;++i) v.push_back(matrix[i][right]); if(top!=bottom) for(int i=right-1;i>=left;--i) v.push_back(matrix[bottom][i]); if(left!=right) for(int i=bottom-1;i>top;i--) v.push_back(matrix[i][left]); left++,right--,top++,bottom--; } // int left=0,top=0,right=cols-1,bottom=rows-1; // while(left<=right && top<=bottom){ // //left——》right // for(int i=left;i<=right;++i) // v.push_back(matrix[top][i]); // //top-->bottom // for(int i=top+1;i<=bottom;++i) // v.push_back(matrix[i][right]); // //right-->left // if(top!=bottom) // for(int i=right-1;i>=left;--i) // v.push_back(matrix[bottom][i]); // //bottom-->top // if(left!=right) // for(int i=bottom-1;i>top;--i) // v.push_back(matrix[i][left]); // left++,top++,right--,bottom--; // } // int circles=((rows<cols?rows:cols)-1)/2+1;//圈数 // for(int i=0;i<circles;i++){ // //从左往右打印 // for(int j=i;j<cols-i;j++){ // v.push_back(matrix[i][j]); // } // //从上往下打印 // for(int k=i+1;k<rows-i;k++){ // v.push_back(matrix[k][cols-1-i]); // } // //从右往左打印(判断有无重复打印) // for(int m=cols-i-2;(m>=i)&&(rows-i-1!=i);m--){ // v.push_back(matrix[rows-i-1][m]); // } // //从下往上(判断是否重复打印) // for(int n=rows-i-2;(n>i)&&(cols-i-1!=i);n--){ // v.push_back(matrix[n][i]); // } // } return v; } };