题解 | #螺旋矩阵#(设置四个方向的指针,每次向内循环,边界判断只有一行或一列的情况)
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
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;
}
};
海康威视公司福利 1117人发布