题目
Number: 54
Difficulty: Medium
Tags: Array
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]
.
题解
螺旋数组问题。
常规方法就是分四条边考虑,注意各种边界。
代码
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty())
return res;
int m = matrix.size(), n = matrix[0].size();
int max = m * n, i = 0, j = 0, cur = 0, level = 0;
while(cur < max){
while(j < n - level && cur < max){
res.push_back(matrix[i][j]);
cur++;
j++;
}
j--;
i++;
while(i < m-level && cur < max){
res.push_back(matrix[i][j]);
cur++;
i++;
}
i--;
j--;
while(j >= level && cur < max){
res.push_back(matrix[i][j]);
cur++;
j--;
}
j++;
i--;
while(i > level && cur < max){
res.push_back(matrix[i][j]);
cur++;
i--;
}
i++;
j++;
level++;
}
return res;
}