顺时针打印矩阵
如上图
3x3
的矩阵,按顺时针方向将其打印出来应该为[1,2,3,6,9,8,7,4,5]
,这种题目乍一看十分简单,其实也不难,不怎么有数据结构和算法相关的东西,关键要考虑各种情况可分为几种情况,都要考虑到:
- 矩阵是方阵的时候
- 是普通矩阵的时候
- 只有单行或单列的时候
要顺时针打印出矩阵中所有的元素,需要一圈一圈的打印
代码:
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { int r=matrix.size(); int c=matrix[0].size(); vector<int>res; int i=0; int f=matrix.size()*(matrix[0].size()); int j=0; while(j<f){ int rf=i,cf=i; if(r==(i+1)||c==(i+1)){ for(int p=i;p<r;p++) for(int q=i;q<c;q++) res.push_back(matrix[p][q]); break; } for(;cf<c;cf++){ res.push_back(matrix[rf][cf]); ++j; } rf+=1; cf-=1; for(;rf<r;++rf){ res.push_back(matrix[rf][cf]); ++j; } rf-=1; cf-=1; for(;cf>=i;--cf){ res.push_back(matrix[rf][cf]); ++j; } cf+=1; rf-=1; for(;rf>i;--rf){ res.push_back(matrix[rf][cf]); ++j; } i+=1; c-=1; r-=1; } return res; } };
- 若使用需要打印的最小圈数作为循环结束条件,可以将代码写的更加简洁,见这里讨论部分。