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. 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的更多相关文章

  1. Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III)

    Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III) 深度优先搜索的解题详细介绍,点击 在二维网格 grid 上,有 4 种类型的方格: 1 ...

  2. leetcode #980 不同路径||| (java)

    在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格.2 表示结束方格,且只有一个结束方格.0 表示我们可以走过的空方格.-1 表示我们无法跨越的障碍.返回在四个方向 ...

  3. leetcode 980. Unique Paths III

    On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square.  There is e ...

  4. LeetCode 260. Single Number III(只出现一次的数字 III)

    LeetCode 260. Single Number III(只出现一次的数字 III)

  5. LeetCode:组合总数III【216】

    LeetCode:组合总数III[216] 题目描述 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. ...

  6. LeetCode:简化路径【71】

    LeetCode:简化路径[71] 题解参考天码营:https://www.tianmaying.com/tutorial/LC71 题目描述 给定一个文档 (Unix-style) 的完全路径,请进 ...

  7. LeetCode 71.简化路径

    LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...

  8. [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 ...

  9. leetcode 64. 最小路径和 动态规划系列

    目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...

随机推荐

  1. powerdesigner反转数据库的设计图

    PowerDesigner导入sql文件 1:点击 2:弹出该页面,点击确定 3:弹出一下页面,点击下面按钮选择文件 4:点击确定完成 二 .表转换为中文的执行脚本及步骤 执行脚本为:Option E ...

  2. 2、Python程序控制结构(0530)

    条件测试: 1.if 条件测试表达式 python的比较操作 1.所有的python对象都支持比较操作 可用于测试相等性.相对大小等: 如果是符合对象,python会检查其所有部分,包括自动遍历各级嵌 ...

  3. window下的Django入门

    一.window下新建安装(参考书籍:<python编程:从入门到实践>) 新建一个文件夹 learning_log ,在终端中切换到该目录下,并创建一个虚拟工作环境,运行模块 venv  ...

  4. HDU 5791 Two(LCS求公共子序列个数)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5791 题意: 给出两个序列,求这两个序列的公共子序列的总个数. 思路: 和LCS差不多,dp[i][ ...

  5. 小程序之根据参数更改title

    是这样的,今天呢在写中英文切换功能,哇  从psd图里面去复制英文在去对应,真的是太难受了 okok 切回正题   当用户选择英文的时候   我的title也要是英文怎么办呢 wx.setNaviga ...

  6. 在ETH交易区块链里查看北大的那封信

    本文仅限于科普编码知识使用,随便举的例子不代表本人立场. 欢迎在其他网站传播,但转载不得标注来源及作者. 1.随便打开一个ETH区块链浏览网站,比如:https://www.etherchain.or ...

  7. Windows下的Python 3.6.1的下载与安装(适合32bits和64bits)(图文详解)

    不多说,直接上干货! 为什么,这么简单的一个python,我还要特意来写一篇博客呢? 是因为留念下,在使用了Anaconda2和Anaconda3的基础上,现在需安装python3.6.0来做数据分析 ...

  8. python 文件保存 出错

    如果你出现如下错误: file save failed encoding failed: 'latin-1' codec can't encode characters in position 57- ...

  9. leecode第八十九题(格雷编码)

    class Solution { public: vector<int> grayCode(int n) { vector<int> res; res.push_back(); ...

  10. leecode第八十八题(合并两个有序数组)

    class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums ...