/*本题是一道模拟题,直接按照顺时针旋转在矩阵外围的四条边“行走”即可。
当不在能“行走”时(不满足条件),即完成了SpiralOrder的输出。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result;
if(matrix.empty() || matrix.front().empty()) return result;
int start_x(0), end_x(matrix.front().size()-1);
int start_y(0), end_y(matrix.size()-1);
while(true){//循环绕着四条边组成的环“行走”
//从左到右
for(int i = start_x; i < end_x + 1; ++i) result.push_back(matrix[start_y][i]);
if(++start_y > end_y) break;
//从上到下
for(int i = start_y; i < end_y + 1; ++i) result.push_back(matrix[i][end_x]);
if(--end_x < start_x) break;
//从右到左
for(int i = end_x; i > start_x - 1; --i) result.push_back(matrix[end_y][i]);
if(--end_y < start_y) break;
//从下到上
for(int i = end_y; i > start_y - 1; --i) result.push_back(matrix[i][start_x]);
if(++start_x > end_x) break;
}
return result;
}
};