一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。
示例 1:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:

向右 -> 向右 -> 向下 -> 向下
向下 -> 向下 -> 向右 -> 向右
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if(obstacleGrid.size() == 0 || obstacleGrid[0].size() == 0) return 0;
int row = obstacleGrid.size();
int col = obstacleGrid[0].size();
vector<vector<long>> dp(row, vector<long>(col, 0)); //表示走到(row, col)需要的步数
for(int i = 0; i < row; i++)
{
if(obstacleGrid[i][0] != 0)
{
break;
}
dp[i][0] = 1;
}
for(int i = 0; i < col; i++)
{
if(obstacleGrid[0][i] != 0)
{
break;
}
dp[0][i] = 1;
}
for(int i = 1; i < row; i++)
{
for(int j = 1; j < col; j++)
{
if(obstacleGrid[i][j] == 0)
{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[row-1][col-1];
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
典型的动态规划问题,先求边缘值(左边缘和上边缘),边缘遇到障碍之后,后续边缘的步数为0,确定好边缘之后,对于不是障碍物的区间,求其路径值即可
---------------------

最新文章

  1. 基于dom的xss漏洞原理
  2. java 给指定时间加上天数or给当前日期加天数
  3. spring知识大全(3)
  4. 使用xib需要记得的小问题
  5. jquery mobile 方法收集.
  6. Java实现猜数游戏
  7. hdu3394--Railway(点的双连通分量)
  8. Alternating Current
  9. [BZOJ 2004] [Hnoi2010] Bus 公交线路 【状压DP + 矩阵乘法】
  10. percentiles of live data capture
  11. 初探Java设计模式1:创建型模式(工厂,单例等)
  12. nginx/php的redis模块扩展
  13. 用web技术写APP
  14. 使用cefsharp 浏览器放大
  15. JNI和NDK基础
  16. Java包装类及其拆箱装箱
  17. 用Python破解斗地主残局
  18. MySQL--7MySQL自定义函数
  19. spring mvc 形参类型
  20. 团体队列(UVa540)

热门文章

  1. bootstrap日期控件
  2. MICRO SIM卡(SIM小卡)尺寸图及剪卡图解
  3. zedboard 流水灯
  4. mac关闭和开启启动声
  5. HDU 1299Diophantus of Alexandria
  6. UVALive 4212 - Candy
  7. Bing Maps进阶系列七:Bing Maps功能导航菜单华丽的变身
  8. XAML实例教程系列 - 对象和属性(二)
  9. POJ2352 Stars 树状数组
  10. JSP-Runoob:JSP 页面重定向