力扣:63. 不同路径 II
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
问题分析
动态规划:
- 确定dp数组以及下标的含义:dp[i][j]:表示从(0,0)出发,到达(i,j)有dp[i][j]条不同路径
- 确定递推公式:递推公式和力扣:62.不同路径一样,dp[i][j]=dp[i-1][j]+dp[i][j-1],不过要注意,如果(i,j)就是障碍物,则应该保持初始状态(初始状态为0)
- 初始化dp数组:从(0,0)到(i,0)的路径只有一条,所以dp[i][0]一定都是1,dp[0][j]同理。如果(i,0)这一条路径上有了障碍物,那么障碍物之后(包括障碍物)位置都是不能到达的,所以障碍物之后的dp[i][0]应该还是初始值0,同理(0,j)路径上也一样。
代码实现
// 编程软件:VS2019
// 参考书籍:代码随想录
#include<iostream>
#include<vector>
using namespace std;//动态规划
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1; // (i,0)路径for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1; // (0,j)路径for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue; // 障碍物dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];
}int main() {vector<vector<int>> obstacleGrid = { {0, 0, 0},{0, 1, 0},{0, 0, 0} };cout<< uniquePathsWithObstacles(obstacleGrid);
}
// 结果:2
力扣:63. 不同路径 II相关推荐
- Java实现 LeetCode 63 不同路径 II(二)
63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...
- LeetCode-动态规划基础题-63. 不同路径II
描述 63. 不同路径II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角 ...
- LeetCode:63. 不同路径 II
题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...
- 摩尔投票法(力扣- -229. 求众数 II)
摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...
- leetcode题库--63不同路径 II
不同路径 这题就是一个组合问题. int fun(int num){int ans = 1;while(num){ans*=num;num--;}return ans;}int uniquePaths ...
- 63. 不同路径 II【动态规划】
63.不同路径 II 题目链接:https://leetcode-cn.com/problems/unique-paths-ii/ 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 ...
- 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II
原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...
- LeetCode 63. 不同路径 II(DP)
1. 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...
- leetcode - 63. 不同路径 II
一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为"Start""Start""Start" ). 机器人每次 ...
最新文章
- 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
- Python基础(1)
- DOS下从硬盘安装XP系统方法与要点
- php 获取请求,PHP 扩展 - 获取请求信息
- scheme 学习:红黑树
- 信息学奥赛一本通 2033:【例4.19】阶乘之和
- 3、构建并安装PHP扩展
- 实践单元测试-Using NUnit 大纲
- Entity Framework 5自动生成ObjectContext或者DbContext的设置
- matlab瓶盖盖严检查,口服液瓶盖密封性的质量检测方法你知道吗?
- stm32f7 java_STM32F7开发-安装MDK超详细操作步骤
- 对冲策略及Python实现
- 节理玫瑰花图怎么画_利用Excel软件绘制节理走向玫瑰花图
- 关于专利申请中发明内容和具体实施方法有什么本质区别?
- Ricochet —— 基于 Tor 的加密即时通信工具
- Mac 上删除键(delete)的妙用
- CSS中颜色、样式规则(字体样式、列表样式、表格样式)
- Ubuntu中编写C语言程序
- 计算机网络利弊的作文英语作文,网络的利弊英语作文模板及范文赏析
- ps42k20服务器出现问题_香港代理服务器和香港服务器有什么不同,如何选择?-行业新闻...