面试题29. 顺时针打印矩阵
题目:
解答:
1 class Solution { 2 public: 3 vector<int> spiralOrder(vector<vector<int>>& matrix) 4 { 5 vector<int> result; 6 if (matrix.empty()) 7 { 8 return result; 9 } 10 11 ssize_t beginX = 0, endX = matrix[0].size() - 1; 12 ssize_t beginY = 0, endY = matrix.size() - 1; 13 14 while (true) 15 { 16 // From left to right 17 for (ssize_t i = beginX; i <= endX; ++i) 18 result.push_back(matrix[beginY][i]); 19 if (++beginY > endY) 20 break; 21 22 // From top down 23 for (ssize_t i = beginY; i <= endY; ++i) 24 result.push_back(matrix[i][endX]); 25 if (beginX > --endX) 26 break; 27 28 // From right to left 29 for (ssize_t i = endX; i >= beginX; --i) 30 result.push_back(matrix[endY][i]); 31 if (beginY > --endY) 32 break; 33 34 // From bottom up 35 for (ssize_t i = endY; i >= beginY; --i) 36 result.push_back(matrix[i][beginX]); 37 if (++beginX > endX) 38 break; 39 } 40 return result; 41 } 42 };