剑指 Offer 29. 顺时针打印矩阵
思路:模拟
- 空值处理:当matrix为空时,直接返回空列表
- 初始化
- 循环打印
- 返回列表
class Solution {
public:
vector<pair<int,int>> mv={{0,1},{1,0},{0,-1},{-1,0}};
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int direction=0;
vector<int> ans;
if(matrix.empty()||matrix[0].empty())
return ans;
int m=matrix.size(),n=matrix[0].size();
int sz=m*n,k=0,i=0,j=0;
vector<vector<bool>> isVisited(m,vector<bool>(n,false));
for(int k=0;k<sz;k++){
ans.push_back(matrix[i][j]);
isVisited[i][j]=true;
int newi=i+mv[direction].first;
int newj=j+mv[direction].second;
if(newi<0||newi>=m||newj<0||newj>=n||isVisited[newi][newj]){
direction=(direction+1)%4;
}
i+=mv[direction].first;
j+=mv[direction].second;
}
return ans;
}
};
时间复杂度 O(mn)
空间复杂度 O(1)