劍指Offer——順時針打印矩陣
阿新 • • 發佈:2017-10-29
res otto pre 打印 () amp 題目 依次 數字
題目描述:
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,
例如,如果輸入如下矩陣:
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.
分析:
小心越界,小心死循環。細心點就可以模擬出來。
代碼:
1 class Solution { 2 public: 3 vector<int> printMatrix(vector<vector<int> > matrix) { 4 int h = matrix.size();5 int w = matrix[0].size(); 6 vector<int> res; 7 if(h == 0 || w == 0) return res; 8 int left = 0, right = w - 1, top = 0, bottom = h - 1; 9 while(left <= right && top <= bottom) { 10 int i = top, j = left; 11 for(j = left; j < right; j++) res.push_back(matrix[i][j]); //向右打印 12 if(top == bottom) { // 最後一行一次性打印到末尾 13 res.push_back(matrix[i][j]); 14 break; 15 } 16 for(i = top; i < bottom; i++) res.push_back(matrix[i][j]); // 向下打印 17 if(left == right) { // 最後一列一次性打印到末尾 18 res.push_back(matrix[i][j]);19 break; 20 } 21 for(j = right; j > left; j--) res.push_back(matrix[i][j]); // 向左打印 22 for(i = bottom; i > top; i--) res.push_back(matrix[i][j]); // 向上打印 23 left++; right--; 24 top++; bottom--; 25 } 26 return res; 27 } 28 };
劍指Offer——順時針打印矩陣