当前位置: 首页 > article >正文

leetcode热题100(54. 螺旋矩阵)c++

链接:54. 螺旋矩阵 - 力扣(LeetCode)

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

示例 1:

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

示例 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]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

思路

因为顺时针遍历,最简单的想法就是dfs遍历一遍,只要我们遇到边界条件或已经遍历过的点,直接换一个方向接着遍历即可,只会存在一个方法是没遍历过的,直到容器的大小为n*m那么说明整个数组已经遍历了一遍

代码

class Solution {
public:
    int st[12][12];
    int dx[4]={-1,0,1,0};
    int dy[4]={0,-1,0,1};
    int n,m;
    vector<int> res;
    vector<int> spiralOrder(vector<vector<int>>& g) {
        n = g.size();
        m = g[0].size();
        st[0][0]=true;
        res.push_back(g[0][0]);
        dfs(0,0,3,g);
        return res;
    }

    void dfs(int x,int y,int op,vector<vector<int>>& g){
        if(res.size()>=n*m) return;
        int tx = x+dx[op];
        int ty = y+dy[op];
        if(tx<0||tx>=n||ty<0||ty>=m||st[tx][ty]){
            for(int i=0;i<4;i++){
                tx = x+dx[i];
                ty = y+dy[i];
                if(tx<0||tx>=n||ty<0||ty>=m||st[tx][ty]) continue;
                else{
                    res.push_back(g[tx][ty]);
                    st[tx][ty]=true;
                    dfs(tx,ty,i,g);
                    return;
                }
            }
        }else{
            res.push_back(g[tx][ty]);
            st[tx][ty]=true;
            dfs(tx,ty,op,g);
        }
    }

};


http://www.kler.cn/a/455781.html

相关文章:

  • 强化学习基础之贝尔曼期望方程
  • win版ffmpeg的安装和操作
  • python递归最多多少层
  • 国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
  • 通过交叉实现数据触底分页效果new IntersectionObserver()(html、react、vue2、vue3)中使用
  • 免费资源网站
  • 基于Debian的Linux发行版的包管理工具
  • 青训营-豆包MarsCode技术训练营试题解析四十八
  • 用于汽车碰撞仿真的 Ansys LS-DYNA
  • react里使用Day.js显示时间
  • 深度学习每周学习总结R1(RNN-心脏病预测)
  • 绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图
  • python应用场景随笔
  • sqoop的参数有哪些?
  • 区块链开发入门合集(1)共25节
  • Pytorch | 利用GNP针对CIFAR10上的ResNet分类器进行对抗攻击
  • w04_nlp大模型训练·中文分词
  • 再生核希尔伯特空间(RKHS)上的分位回归
  • 【MFC】多工具栏如何保存状态(续)
  • 二百八十一、ClickHouse——Linux中启动ClickHouse服务
  • Matlab个性化绘图第7期—带标记面的三维多组折线图
  • 探究C++面试高频考点:std::string的底层实现
  • Unity Dots理论学习-2.ECS有关的模块(1)
  • 【每日学点鸿蒙知识】编译文件异常、线程安全保障、正式签名7014错误、引用hsp报错、跨文件样式复用
  • 网络攻防实践
  • 适配器模式概述