题目描述:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
解题思路:
1 class Solution { 2 public: 3 vector<int> spiralOrder(vector<vector<int>>& matrix) { 4 vector<int> result; 5 if (matrix.size() == 0) { 6 return result; 7 } 8 int left = 0; 9 int right = matrix[0].size() - 1; 10 int up = 0; 11 int down = matrix.size() - 1; 12 13 int n = matrix.size() * matrix[0].size(); 14 15 while (true) { 16 for (int i = left; i <= right; ++i) { 17 result.push_back(matrix[up][i]); 18 --n; 19 } 20 if (n <= 0) { 21 break; 22 } 23 24 up += 1; 25 for (int i = up; i <= down; ++i) { 26 result.push_back(matrix[i][right]); 27 --n; 28 } 29 if (n <= 0) { 30 break; 31 } 32 33 right -= 1; 34 for (int i = right; i >= left; --i) { 35 result.push_back(matrix[down][i]); 36 --n; 37 } 38 if (n <= 0) { 39 break; 40 } 41 42 down -= 1; 43 for (int i = down; i >= up; --i) { 44 result.push_back(matrix[i][left]); 45 --n; 46 } 47 left += 1; 48 49 if (n <= 0) { 50 break; 51 } 52 } 53 54 return result; 55 } 56 };