class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> ans; if(matrix.empty()) return ans; int m = matrix.size(), n = matrix[0].size(); int left = 0, right = n-1, top = 0, bottom = m-1; while(left <= right && top <= bottom){ for(int i = left; i <= right; i++){ ans.push_back(matrix[top][i]); } for(int i = top+1; i <= bottom; i++){ ans.push_back(matrix[i][right]); } // 一定要判断top==bottom,只有一行,此时不用再将这一行重复输出。 for(int i = right - 1; bottom != top && i >= left; i--){ ans.push_back(matrix[bottom][i]); } // 同理判断left == right,只有一列,此时不用再将这一列重复输出。 for(int i = bottom -1; left!=right && i >= top + 1; i--){ ans.push_back(matrix[i][left]); } ++top, --bottom, ++left, --right; } return ans; } };