P54 螺旋矩阵
一道模拟题 , 不是很难,但对于边界的判断容易失误。


- 通过上下左右四个边界进行遍历 , 防止越界。
- 时间复杂度为O(m * n)
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int n = matrix.size() , m = matrix[0].size();
int up = 0 , down = n-1 , left = 0 , right = m-1;
vector<int> ans;
while(true){
// 左到右遍历, up这一行
for(int i = left;i <= right;i++) ans.push_back(matrix[up][i]);
up ++;
// 判断上边界是否超过下边界
if(up > down) break;
// 上到下, 遍历right这一列
for(int i = up;i <= down;i++) ans.push_back(matrix[i][right]);
right --;
// 判断右边界是否超过左边界
if(right < left) break;
// 从右到左 ,遍历down
for(int i = right;i >= left;i--) ans.push_back(matrix[down][i]);
down--;
// 判断down是否超过up
if(down < up) break;
// 从下到上,遍历left
for(int i = down;i >= up;i--) ans.push_back(matrix[i][left]);
left ++;
// 判断左是否超过右边界
if(left > right) break;
}
return ans;
}
};
下次见!