LeetCode 63
Unique Paths II
这次还是机器人在最左上角,想要到达最右下角,机器人能走的方向还是向下和向右,但是与上次不同的是:路上有障碍物,有障碍物的地方不能通过,找出所有独一无二的路径。
上个题的解题思路我自己好像也没什么算法根据,凭借的是自己观察问题找到的,不过这个题我还是按照那样的想法去做的话,确实没想通,我试了一下,发现代码很复杂而且没有把握,所以我换了种思路,我借鉴了一下网友的,主要是为了弄明白这个题属于哪一类问题,它是动态规划类的问题!
首先,我们可以得出这样一个结论:机器人当前所在的位置(i,j)其实是由(i,j-1)或者(i-1,j)位置得到的,所以我们可以得出:
nums(i , j) = nums(i , j-1) + nums(i-1 , j)
这点推导出来了,解题就简单多了,所以我们就可以很方便的解题了,不过需要注意的一点就是,当 (i , j) 位置为障碍物时,它的路径数目为0。
下面就给出代码吧,想清楚思路后真的是很容易就可以解决问题。
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if (obstacleGrid.size() == 0 || obstacleGrid[0].size() == 0){return 0;}//采用动态规划解题int xLen = obstacleGrid.size();int yLen = obstacleGrid[0].size();//开辟额外的空间,因为每个位置都是由它上方或者左方过来的,所以(i,j)位置的路径=nums(i,j-1)+nums(i-1,j)//多开辟出来的空间其实是辅助作用vector<vector<int>> V(xLen + 1, vector<int>(yLen + 1, 0));V[0][1] = 1; // 其实将v[1][0]置为1效果一样,因为他们都是辅助空间for (int i = 1; i <= xLen; ++i){for (int j = 1; j <= yLen; ++j){if (obstacleGrid[i-1][j-1] == 0)V[i][j] = V[i][j - 1] + V[i - 1][j]; //nums(i,j) = nums(i,j-1) + nums(i-1,j)elseV[i][j] = 0; //但是考虑到存在障碍物,障碍物对应位置的路径数目为 0 }}return V[xLen][yLen];}
};
程序的结果如下:
LeetCode 63相关推荐
- 【动态规划】LeetCode 63. Unique Paths II
LeetCode 63. Unique Paths II Solution1:我的答案 在哪里做过这题? class Solution { public:int uniquePathsWithObst ...
- [Lintcode]115. Unique Paths II/[Leetcode]63. Unique Paths II
115. Unique Paths II/63. Unique Paths II 本题难度: Easy/Medium Topic: Dynamic Programming Description Fo ...
- Java实现 LeetCode 63 不同路径 II(二)
63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...
- LeetCode:63. 不同路径 II
题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...
- LeetCode 63. 不同路径 II(DP)
1. 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...
- leetcode - 63. 不同路径 II
一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为"Start""Start""Start" ). 机器人每次 ...
- 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程 dp[i][j] = dp[i-1][j] + dp[i][j-1] 步骤三. ...
- Leetcode 63. 不同路径 II (每日一题 20210903)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为"F ...
- [LeetCode]--63. Unique Paths II
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
- LeetCode 63. Unique Paths II
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
最新文章
- 实验三编程、编译、连接、跟踪
- chapter14 机器学习之利用SVD简化数据
- 京东共聚黑山县三方合力-农民丰收节·万祥军:谋定智慧农业
- 腾讯TDSQL提出三个“数据库之问”,数据库技术未来重点在哪?
- Java8使用 Optional 处理 null
- java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
- [css] 写出你知道的CSS水平和垂直居中的方法
- DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)
- ES6的类Class基础知识点
- ROM.RAM,FLASH,PROM,EPROM,EEPROM的区别
- GSMA在G20峰会召开之前就妇女数字融合提出综合性议程
- 安全赋能区域数字化转型,普陀区副区长徐树杰带队调研上海控安
- 最近k8s遇到的一些问题
- 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
- 形式化方法:Linear Arithmetic
- bind9 dlz mysql_Bind9和MySQL DLZ缓冲区错误
- Q50:TCP如何保证可靠性?
- lisp语言画阿基米德线_120种UG表达式曲线画法(阿基米德螺旋线、数学方程式)...
- Java和Java大数据有什么区别?
- 谷歌浏览器查找页面内容快捷键
热门文章
- UE4/5动画系列(2.怎么套模板)
- Java 虚拟机(JVM (Java Virtual Machine))
- 第7关:数据的基本操作——去重
- 新版股票配资系统源码/股票分析系统/融资融券/两融C#
- detectron2训练自己的数据集和转coco格式
- 剑指offer编程试题Java实现--64.滑动窗口的最大值
- 点击返回键,将应用退至后台运行
- hydra(九头蛇)爆破常见端口
- Python Flask_caching-缓存
- ETA9740 三合一移动电源芯片 3A充电电流2.4A升压输出