1. 程式人生 > >劍指Offer——順時針打印矩陣

劍指Offer——順時針打印矩陣

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——順時針打印矩陣