劍指offer29--順時針列印矩陣
阿新 • • 發佈:2018-12-31
題目描述
輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 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.
思路:
- 列印從0,0-------1,1-------------2.2
- 從0,0開始每次遇到起點就列印一整圈
邊界條件比較麻煩。
行列對應這矩陣的行列---X,Y值
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; int row=matrix.size(); int line=matrix[0].size(); printMatCore(matrix,row,line,res); return res; } void printMatCore(vector<vector<int> >& matrix,int row,int line,vector<int>& res) { if(row<=0||line<=0) return; int start=0; while(row>start*2&&line>start*2) { PrintCircle(matrix,row,line,start,res); ++start; } } void PrintCircle(vector<vector<int> >& matrix,int row,int line,int start,vector<int>& res) { int endY=line-1-start;//Y列 int endX=row-1-start;//X行 for(int i=start;i<=endY;i++) res.push_back(matrix[start][i]); if(endX>start) for(int i=start+1;i<=endX;i++) res.push_back(matrix[i][endY]); if(endX>start&&endY>start) for(int i=endY-1;i>=start;i--) res.push_back(matrix[endX][i]); if(endY>start&&endX>start+1) for(int i=endX-1;i>=start+1;i--) res.push_back(matrix[i][start]); } };