劍指offer——19.順時針列印矩陣
阿新 • • 發佈:2018-12-13
題目描述:
輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下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)……,由此i可推斷出結束位置,每次注意只有一行或者一列的情景。
參考原始碼:
class Solution { public: vector<int> res; vector<int> printMatrix(vector<vector<int> > matrix) { if(matrix.size() == 0 && matrix[0].size() == 0) { return res; } int mark = 0; int rows = matrix.size(); int columns = matrix[0].size(); while(mark <= (matrix.size()-1)/2 && mark <= (matrix[0].size()-1)/2) { Helper(matrix,rows,columns,mark); mark++; } return res; } void Helper(vector<vector<int>> matrix,int rows,int columns,int mark) { //向右 if(columns-1-mark >= mark) { for(int i = mark;i < columns-mark;i++) { res.push_back(matrix[mark][i]); } } //向下 if(rows-1-mark > mark) { for(int i = mark+1;i < rows-mark;i++) { res.push_back(matrix[i][columns-mark-1]); } } //向左 if(rows-1-mark > mark && columns-1-mark > mark) { for(int i = columns-mark-2;i >= mark;i--) { res.push_back(matrix[rows-mark-1][i]); } } //向上 if(rows-1-mark > mark+1 && columns-1-mark > mark) { for(int i = rows-mark-2;i > mark;i--) { res.push_back(matrix[i][mark]); } } } };