2021/3/15,今天的每日一题是Leetcode54. 螺旋矩阵,题目大意如下:
这道题就是一个考验思路和编程基本功的问题,我们通过观察可以发现旋转的方向是固定的,并且矩阵的大小旋转一圈就少了一圈。所以我们可以通过控制矩阵的边界和方向进行输出,思路很简单,具体实现请看代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int n=matrix.size();
int m=matrix[0].size();
int f[4][2]={{0,1}, {1,0},{0,-1},{-1,0}};//定义方向
int x=0,y=0;
int now=0;
vector<int> ans;
for(int i=0;i<n*m;i++)
{
ans.push_back(matrix[x][y]);
matrix[x][y]=999;//值的范围是-100~100,可以用999来标记上下界。
int nowx=x+f[now][0],nowy=y+f[now][1];
if(nowx>=n||nowx<0||nowy>=m||nowy<0||matrix[nowx][nowy]==999)
//试探是否需要改变方向
{
now=(now+1)%4;
}
x+=f[now][0];
y+=f[now][1];
}
return ans;
}
};
时间复杂度:O(NM)*