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;
}
};