题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> Output; if(matrix.empty()||matrix[0].empty()) return Output; pair<int,int>size_=pair<int,int>(matrix[0].size(),matrix.size()); pair<int,int> curindex=pair<int,int>(0,0); PrintCoreUp(Output,matrix, size_, curindex); return Output; } void PrintCoreUp(vector<int> &Output,vector<vector<int> > &matrix, pair<int,int> &size_,pair<int,int> &curindex) { if(size_.first==0||size_.second==0) return; int j=curindex.second; int i=curindex.first; for(int coj=0;coj!=size_.second;) { if(j==curindex.second) { for(int coi=0;coi!=size_.first;) { Output.push_back(matrix[j][i]); ++coi; ++i; } } else { Output.push_back(matrix[j][i-1]); } ++j; ++coj; } curindex.first=i-2; curindex.second=j-1; --size_.first; --size_.second; return PrintCoreDown(Output, matrix,size_, curindex); } void PrintCoreDown(vector<int> &Output,vector<vector<int> > &matrix, pair<int,int> &size_,pair<int,int> &curindex) { if(size_.first==0||size_.second==0) return; int j=curindex.second; int i=curindex.first; for(int coj=0;coj!=size_.second;) { if(j==curindex.second) { for(int coi=0;coi!=size_.first;) { Output.push_back(matrix[j][i]); ++coi; --i; } } else { Output.push_back(matrix[j][i+1]); } --j; ++coj; } curindex.first=i+2; curindex.second=j+1; --size_.first; --size_.second; return PrintCoreUp(Output, matrix,size_, curindex); } };