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]
.
进行剥皮操作,先从左到右,再从上到下,再从右到左,最后从下到上。回到原点。
然后开始剥取下一层。
在leetcode上实际执行时间为2ms。
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; if (matrix.empty() || matrix[0].empty()) return result; int iMin = 0, iMax = matrix.size()-1; int jMin = 0, jMax = matrix[0].size() - 1; while (jMin < jMax && iMin < iMax) { int i = jMin, j = jMin; while (j<jMax) result.push_back(matrix[i][j++]); while (i<iMax) result.push_back(matrix[i++][j]); while (j>jMin) result.push_back(matrix[i][j--]); while (i>iMin) result.push_back(matrix[i--][j]); jMin++; jMax--; iMin++; iMax--; } if (iMin == iMax && jMin <= jMax) while (jMin <= jMax) result.push_back(matrix[iMin][jMin++]); else if (jMin == jMax && iMin < iMax) while (iMin <= iMax) result.push_back(matrix[iMin++][jMin]); return result; } };