Leetcode 980. 不同路径 III
- 用户通过次数42
- 用户尝试次数43
- 通过次数46
- 提交次数60
- 题目难度Hard
在二维网格 grid
上,有 4 种类型的方格:
1
表示起始方格。且只有一个起始方格。2
表示结束方格,且只有一个结束方格。0
表示我们可以走过的空方格。-1
表示我们无法跨越的障碍。
返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目,每一个无障碍方格都要通过一次。
示例 1:
- 输入:[[1,0,0,0],[0,0,0,0],[0,0,2,-1]]
- 输出:2
- 解释:我们有以下两条路径:
- 1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
- 2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)
示例 2:
- 输入:[[1,0,0,0],[0,0,0,0],[0,0,0,2]]
- 输出:4
- 解释:我们有以下四条路径:
- 1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
- 2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3)
- 3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3)
- 4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)
示例 3:
- 输入:[[0,1],[2,0]]
- 输出:0
- 解释:
- 没有一条路能完全穿过每一个空的方格一次。
- 请注意,起始和结束方格可以位于网格中的任意位置。
提示:
1 <= grid.length * grid[0].length <= 20
- class Solution {
- public:
- int uniquePathsIII(vector<vector<int>>& grid) {
- int n = grid.size();
- int m = grid[].size();
- int a = ;
- int b = ;
- vector<vector<int>> vis(n,vector<int>(m));
- int cnt = ;
- for(int i=;i < n;i++){
- for(int j=;j < m;j++){
- if(grid[i][j] == ){
- cnt++;
- vis[i][j] = ;
- }
- else if(grid[i][j] == ){
- vis[i][j] = ;
- }
- else if(grid[i][j] == -){
- vis[i][j] = ;
- }
- else if(grid[i][j] == ){
- vis[i][j] = ;
- a = i;b = j;
- }
- }
- }
- int res = ;
- dfs(grid,vis,a,b,res,,cnt);
- return res;
- }
- void dfs(vector<vector<int>> grid,vector<vector<int>> vis,int n,int m,int& num,int cnt,int maxnum){
- if(grid[n][m] == ){
- if(cnt- == maxnum) num++;
- else return;
- }
- if((n->=&&n-<grid.size())&&(m>=&&m<grid[].size())&&vis[n-][m] == ){
- vis[n-][m] = ;
- dfs(grid,vis,n-,m,num,cnt+,maxnum);
- vis[n-][m] = ;
- }
- if((n+>=&&n+<grid.size())&&(m>=&&m<grid[].size())&&vis[n+][m] == ){
- vis[n+][m] = ;
- dfs(grid,vis,n+,m,num,cnt+,maxnum);
- vis[n+][m] = ;
- }
- if((n>=&&n<grid.size())&&(m+>=&&m+<grid[].size())&&vis[n][m+] == ){
- vis[n][m+] = ;
- dfs(grid,vis,n,m+,num,cnt+,maxnum);
- vis[n][m+] = ;
- }
- if((n>=&&n<grid.size())&&(m->=&&m-<grid[].size())&&vis[n][m-] == ){
- vis[n][m-] = ;
- dfs(grid,vis,n,m-,num,cnt+,maxnum);
- vis[n][m-] = ;
- }
- }
- };
牛逼哦AC了
Leetcode 980. 不同路径 III的更多相关文章
- Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III)
Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III) 深度优先搜索的解题详细介绍,点击 在二维网格 grid 上,有 4 种类型的方格: 1 ...
- leetcode #980 不同路径||| (java)
在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格.2 表示结束方格,且只有一个结束方格.0 表示我们可以走过的空方格.-1 表示我们无法跨越的障碍.返回在四个方向 ...
- leetcode 980. Unique Paths III
On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square. There is e ...
- LeetCode 260. Single Number III(只出现一次的数字 III)
LeetCode 260. Single Number III(只出现一次的数字 III)
- LeetCode:组合总数III【216】
LeetCode:组合总数III[216] 题目描述 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. ...
- LeetCode:简化路径【71】
LeetCode:简化路径[71] 题解参考天码营:https://www.tianmaying.com/tutorial/LC71 题目描述 给定一个文档 (Unix-style) 的完全路径,请进 ...
- LeetCode 71.简化路径
LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...
- [LeetCode] 216. Combination Sum III 组合之和 III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- leetcode 64. 最小路径和 动态规划系列
目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...
随机推荐
- 19. --mus-- 音乐,娱乐(词20)
- ASP.NET MVC AntiForgeryToken
你开发一个网站,其中有个功能:新闻发布. 你是这样实现的: 1.保存新闻的方法是:/News/Save POST提交 2.接受两个参数:title和content 有一天,你登录网站(浏览器会保存相 ...
- SAP月结操作讲解
SAP月结操作讲解 https://wenku.baidu.com/view/ac6fe45d312b3169a451a4b9.html 步聚 操作内容 事务码 是否必须 操作时间 月/年结 1 ...
- python学习 day09打卡 初识函数
本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...
- JavaWeb 基础学习
XMAPP是自己封装的一套 web 开发套件 —— 例如Tomcat等是用自己的,而不是使用系统中其他地方安装好了的.此外将提供的 xampp 工具解压到 D 盘根目录下.(注意 xampp 一定要解 ...
- CSDN-markdown编辑器语法——字体、字号与颜色
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的! CSDN-markd ...
- STL_string.【转】C++中int、string等常见类型转换
ZC:#include <sstream> ZC:貌似还有 istringstream 和 ostringstream ... https://www.cnblogs.com/gaobw/ ...
- [转]pugixml使用教程
转自:https://www.cnblogs.com/ltm5180/p/3989125.html pugixml介绍 pugixml是一个高性能.轻量级并且简单易用的xml解析库,支持UTF8 en ...
- 写给前端的Python依赖管理指北
概述 在Python的项目中,我们可以通过pip来安装依赖包,但是不像npm install,pip默认安装的依赖包会挂在全局上,不利于项目工程协作. 这时候需要一款类似npm的工具记录我们的项目依赖 ...
- 学习笔记47—PhotoShop技巧
1.photoshop里怎么给画布画对角线? photoshop里给画布画对角线有二种方法: 1) 选直线工具 从一角拉向另一对角 就OK了 非常简单: 2) 选钢笔工具 鼠标先点击某一角 然后再点击 ...