【力扣每日一题】2023.8.4 不同路径3

news2024/9/22 23:33:19

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

在二维网格之上,让我们模拟从开头走到末尾,并且要经过所有能经过的点,问我们有多少种走法。

看到这道题我的第一个想到的就是那种一笔画的游戏 ,就类似这种:

那放到程序里面,我们则需要将数组转变为地图,题目给的条件是1是起点,2是终点,0是可以走的空格,-1是不能走的空格。

这种题目我们一般都是用的DFS也就是深度优先搜索以及回溯递归来做。

我们通过回溯递归来模拟行走,给递归函数传入地图数组的引用,并且再进入新一轮的递归前我们需要先把当前格子置为走过的路,这边我是置为了-1,跟不能走的路是一样的表示,这个是没问题的。

当走到终点2的时候,我们做一个检测,是不是以及把所有能走过的路都走过了,也就是查看我们最终的地图数组还有没有0,如果没有0,那就是说明没有没走过的路,那就是把所有路都走过了。

回溯类的题基本上都是一个模板,我们只需要处理要边界条件即可。

可以参考一下下面的动图,不过只是一部分(完整的过程弄出来太麻烦了)

代码:

class Solution {
public:
    int res=0;
    bool check(vector<vector<int>>& grid){  //检测是否没走过的路
        for(auto& gr:grid){
            for(auto& g:gr){
                if(g==0) return false;  //遇到了0(没走过的路)返回false.
            }
        }
        return true;
    }
    void digui(vector<vector<int>>& grid,int i,int j){
        if(i<0||j<0||i>=grid.size()||j>=grid[0].size()) return; //下标越界,直接返回
        if(grid[i][j]==2 && check(grid)) res++; //如果走到了终点,并且通过了检测,答案加1
        if(grid[i][j]!=0) return;   //不等于0(到了终点,到了走过的路,到了障碍)返回.
        grid[i][j]=-1;  //将当前地点标记为走过的路.
        digui(grid,i+1,j);  //往下走
        digui(grid,i,j+1);  //往右走
        digui(grid,i,j-1);  //往左走
        digui(grid,i-1,j);  //往上走
        grid[i][j]=0;   //回溯
    }

    int uniquePathsIII(vector<vector<int>>& grid) {
        for(int i=0;i<grid.size();i++){
            for(int j=0;j<grid[0].size();j++){
                if(grid[i][j]==1){
                    digui(grid,i+1,j);
                    digui(grid,i,j+1);
                    digui(grid,i,j-1);
                    digui(grid,i-1,j);
                    return res;
                }
            }
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/834442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 3

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨&#xff0c;在1995年出版的《未来之路》一书中&#xff0c;提及“物物互联”。1998年麻省理工学院提出&#xff0c;当时被称作EPC系统的物联网构想。2005年11月&#xff0c;国际电信联盟发布《ITU互联网…

PCIE扩频时钟及参考时钟要求

Spread Spectrum Clocking 1. 概述 Spread Spectrum Clocking(扩频时钟)是采用一种可控的方式使系统时钟抖动以减少峰值能量的过程。主要是为了尽量减少电磁干扰(EMI),主要应用在PCle和USB应用中。与非调制时钟相比,扩频时钟具有相对较高的抖动,应确保下游元件能够承受扩频…

Python:Spider爬虫工程化入门到进阶(1)Scrapy

本文通过简单的小例子&#xff0c;亲自动手创建一个Spider爬虫工程化的Scrapy项目 本文默认读着已经掌握基本的Python编程知识 目录 1、环境准备1.1、创建虚拟环境1.2、安装Scrapy1.3、创建爬虫项目 2、爬虫示例-爬取壁纸2.1、分析目标网站2.2、生成爬虫文件2.3、编写爬虫代码…

用python做一个小项目,python做简单小项目

大家好&#xff0c;本文将围绕用python做一个小项目展开说明&#xff0c;python做简单小项目是一个很多人都想弄明白的事情&#xff0c;想搞清楚python入门小项目需要先了解以下几个事情。 来源丨网络 经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&…

实现实时互动:用Spring Boot原生WebSocket打造你的专属聊天室

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 实现实时互动&#xff1a;用Spring Boot原生WebSocket打造你的专属聊天…

详解Nodejs中的Process对象

在Nodejs中&#xff0c;process是一个全局对象&#xff0c;它提供了与当前进程和运行时环境交互的方法和属性。通过process对象&#xff0c;我们可以访问进程的信息、控制流程和进行进程间通信&#xff0c;这些都是服务端语言应该具备的能力。本文将全面介绍process对象的使用场…

【雕爷学编程】 MicroPython动手做(35)——体验小游戏2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

从感知到理解-融合语言模型的多模态大模型研究

©PaperWeekly 原创 作者 | 张燚钧 单位 | 中国移动云能力中心 研究方向 | 预训练大模型 引言 近年来&#xff0c;大语言模型&#xff08;Large language model, LLM&#xff09;取得了显著进展。以 ChatGPT 为代表的 LLM 在自然语言任务上展现出惊人的智能涌现能力。尽管…

TPU-NNTC 编译部署LPRNet 车牌识别算法

TPU-NNTC 编译部署LPRNet 车牌识别算法 注意&#xff1a; 由于SOPHGO SE5微服务器的CPU是基于ARM架构&#xff0c;以下步骤将在基于x86架构CPU的开发环境中完成 初始化开发环境(基于x86架构CPU的开发环境中完成)模型转换 (基于x86架构CPU的开发环境中完成) 处理后的LPRNet 项…

sql入门4--函数

字符串函数 # -----字符串函数----- # concat(s1,s2,....)拼接 select concat(Hello ,Mysql); #str转换为小写 select lower(HELLO); # str转换为大写 select upper(mysql); # 向左侧添加 str 位数 要添加的元素 select lpad(1, 3 ,-); # 向右侧添加 str 位数 要添加的元…

【单调栈part01】| 739.每日温度、496.下一个更大元素

&#x1f388;LeetCode739. 每日温度 链接&#xff1a;739.每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不…

rv1109/1126 rknn 模型部署过程

rv1109/1126是瑞芯微出的嵌入式AI芯片&#xff0c;带有npu, 可以用于嵌入式人工智能应用。算法工程师训练出的算法要部署到芯片上&#xff0c;需要经过模型转换和量化&#xff0c;下面记录一下整个过程。 量化环境 模型量化需要安装rk的工具包&#xff1a; rockchip-linux/rk…

weblogic XML反序列化分析——CVE-2017-10271

环境 https://vulhub.org/#/environments/weblogic/CVE-2017-10271/ 启动环境 docker-compose up -d代码审计 传入参数 中间跟进函数 最后的出口 没有限制&#xff0c;直接包参数传入xmlDecoder public String readLine() throws IOException {return (String)this.xml…

Class Central-全球在线课程搜索引擎和学习平台

Class Central&#xff08;课程中央网站&#xff09;是一个全球在线课程搜索引擎和学习平台&#xff0c;全球知名的慕课资源导航社区&#xff0c;汇集了来自Coursera&#xff08;斯坦佛大学&#xff09;、edX&#xff08;麻省理工学院&#xff09;、Futurelearn&#xff08;英国…

如何使用vue ui创建一个项目?

首先打开cmd 输入vue ui 等待浏览器打开一个窗口&#xff0c;按照下图操作 在"功能页面"中&#xff0c;各个插件代表以下意思&#xff1a; Babel&#xff1a;Babel是一个JavaScript编译器&#xff0c;用于将ES6代码转换为向后兼容的JavaScript版本&#xff0c;以确保…

ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic

文章目录 0 引言1 D435i相机配置2 新增发布双目位姿功能2.1 新增d435i_stereo.cc代码2.2 修改CMakeLists.txt2.3 新增配置文件D435i.yaml 3 编译运行和结果3.1 编译运行3.2 结果3.3 可能出现的问题 0 引言 ORB-SLAM2学习笔记1已成功编译安装ROS版本ORB-SLAM2到本地&#xff0c…

C++入门篇6 C++的内存管理

在学习C的内存管理之前&#xff0c;我们先来回顾一下C语言中动态内存 int main() {int* p1 (int*)malloc(sizeof(int));free(p1);// 1.malloc/calloc/realloc的区别是什么&#xff1f;int* p2 (int*)calloc(4, sizeof(int));//calloc 可以初始化空间为0int* p3 (int*)reall…

渗透-01:DNS原理和HTML字符编码-HTML实体编码

一、DNS概念 DNS (Domain Name System 的缩写)就是根据域名查出IP地址(常用) DNS分类&#xff1a; 正向解析&#xff1a;已知域名解析IP反向解析&#xff1a;已知IP解析对应的域名 二、查询过程 工具软件dig可以显示整个查询过程 [rootnode01 ~]# dig baidu.com; <<>&…

pytorch学习——卷积神经网络——以LeNet为例

目录 一.什么是卷积&#xff1f; 二.卷积神经网络的组成 三.卷积网络基本元素介绍 3.1卷积 3.2填充和步幅 3.2.1填充&#xff08;Padding&#xff09; 填充是指在输入数据周围添加额外的边界值&#xff08;通常是零&#xff09;&#xff0c;以扩展输入的尺寸。填充可以在卷…

重磅特性 - SpreadJS推出新插件甘特图,预览版下载体验中

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 甘特图对于业务场景中的工程项目管理、预算执行、生产计划等都能将原有的表格数据&…