您现在的位置是:首页 >其他 >leetcode 54. 螺旋矩阵网站首页其他

leetcode 54. 螺旋矩阵

wyj不吃草 2024-06-17 10:18:43
简介leetcode 54. 螺旋矩阵

题目链接:leetcode 54

1.题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

2.示例

1)示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

2)示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

3)提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

3. 分析

根据分析,可以发现顺时针螺旋顺序分别是向右,向下,向左,向上再向右,可以记录元素是否被访问来确定以上四个方向的边界

4.代码

class Solution {
public:
    vector<int> ans;
    bool vis[15][15];
    bool check(int x,int y,vector<vector<int>>& matrix){
        int n=matrix.size(),m=matrix[0].size();
        if(x<0||x>=n) return false;
        if(y<0||y>=m) return false;
        if(vis[x][y]==true) return false;
        return true;
    }
    void get_dfs(int x,int y,vector<vector<int>>& matrix,int op) {
        vis[x][y]=true;
        ans.push_back(matrix[x][y]);
        int n=matrix.size(),m=matrix[0].size();
        if(op==0){
            if(check(x,y+1,matrix)) get_dfs(x,y+1,matrix,op);
            else {
                if(check(x+1,y,matrix)) get_dfs(x+1,y,matrix,1);
            }
            return;
        }
        if(op==1){
            if(check(x+1,y,matrix))get_dfs(x+1,y,matrix,op);
            else {
                if(check(x,y-1,matrix)) get_dfs(x,y-1,matrix,2);
            }
            return;
        }
        if(op==2){
            if(check(x,y-1,matrix)) get_dfs(x,y-1,matrix,op);
            else {
                if(check(x-1,y,matrix)) get_dfs(x-1,y,matrix,3);
            }
            return;
        }
        if(check(x-1,y,matrix)) get_dfs(x-1,y,matrix,op);
        else {
            if(check(x,y+1,matrix)) get_dfs(x,y+1,matrix,0);
        }
    }
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        memset(vis,false,sizeof(vis));
        get_dfs(0,0,matrix,0);
        return ans;
    }
};
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。