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相关推荐

  1. 【动态规划】LeetCode 63. Unique Paths II

    LeetCode 63. Unique Paths II Solution1:我的答案 在哪里做过这题? class Solution { public:int uniquePathsWithObst ...

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

  3. Java实现 LeetCode 63 不同路径 II(二)

    63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...

  4. LeetCode:63. 不同路径 II

    题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...

  5. LeetCode 63. 不同路径 II(DP)

    1. 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  6. leetcode - 63. 不同路径 II

    一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为"Start""Start""Start" ). 机器人每次 ...

  7. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)

    步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程 dp[i][j] = dp[i-1][j] + dp[i][j-1] 步骤三. ...

  8. Leetcode 63. 不同路径 II (每日一题 20210903)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为"F ...

  9. [LeetCode]--63. Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  10. LeetCode 63. Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

最新文章

  1. 实验三编程、编译、连接、跟踪
  2. chapter14 机器学习之利用SVD简化数据
  3. 京东共聚黑山县三方合力-农民丰收节·万祥军:谋定智慧农业
  4. 腾讯TDSQL提出三个“数据库之问”,数据库技术未来重点在哪?
  5. Java8使用 Optional 处理 null
  6. java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
  7. [css] 写出你知道的CSS水平和垂直居中的方法
  8. DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)
  9. ES6的类Class基础知识点
  10. ROM.RAM,FLASH,PROM,EPROM,EEPROM的区别
  11. GSMA在G20峰会召开之前就妇女数字融合提出综合性议程
  12. 安全赋能区域数字化转型,普陀区副区长徐树杰带队调研上海控安
  13. 最近k8s遇到的一些问题
  14. 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
  15. 形式化方法:Linear Arithmetic
  16. bind9 dlz mysql_Bind9和MySQL DLZ缓冲区错误
  17. Q50:TCP如何保证可靠性?
  18. lisp语言画阿基米德线_120种UG表达式曲线画法(阿基米德螺旋线、数学方程式)...
  19. Java和Java大数据有什么区别?
  20. 谷歌浏览器查找页面内容快捷键

热门文章

  1. UE4/5动画系列(2.怎么套模板)
  2. Java 虚拟机(JVM (Java Virtual Machine))
  3. 第7关:数据的基本操作——去重
  4. 新版股票配资系统源码/股票分析系统/融资融券/两融C#
  5. detectron2训练自己的数据集和转coco格式
  6. 剑指offer编程试题Java实现--64.滑动窗口的最大值
  7. 点击返回键,将应用退至后台运行
  8. hydra(九头蛇)爆破常见端口
  9. Python Flask_caching-缓存
  10. ETA9740 三合一移动电源芯片 3A充电电流2.4A升压输出