当前位置:   article > 正文

代码随想录算法训练营Day39|62.不同路径、63.不同路径II

代码随想录算法训练营Day39|62.不同路径、63.不同路径II

一、62 不同路径

1. 题目链接:力扣

2. 思路:求的是路径数,那么最左侧一列和最上面一行都只能朝一个方向走,因此只有一个路径,初始化的时候需要初始这些。而其他的数据应该是将这个格子上方与左侧的两个格子相加得出。需要注意的是js的二维数组定义方式,得记住。

3. 代码:

  1. var uniquePaths = function(m, n) {
  2. // 这里要记住这个二维数组的定义方法
  3. var dp = Array(m).fill().map(item => Array(n));
  4. for (let i=0; i<m; i++) dp[i][0] = 1;
  5. for (let j=0; j<n; j++) dp[0][j] = 1;
  6. for (let i=1; i<m; i++) {
  7. for (let j=1; j<n; j++) {
  8. dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
  9. }
  10. }
  11. console.log(dp);
  12. return dp[m - 1][n - 1];
  13. };

二、63 不同路径II

1. 题目链接:力扣

2. 思路:主要是需要判断障碍物部分,如果有的话需要把dp数组的这一个格子设为0,另外还需要注意初始化方面的问题,具体见代码。

3. 代码:

  1. var uniquePathsWithObstacles = function(obstacleGrid) {
  2. var m = obstacleGrid.length;
  3. var n = obstacleGrid[0].length;
  4. var dp = Array(m).fill().map(item => Array(n));
  5. for (let i=0; i<m; i++) {
  6. for (let j=0; j<n; j++) {
  7. if (obstacleGrid[i][j] === 1) {
  8. dp[i][j] = 0;
  9. }
  10. // 需要规定dp[0][0]是1,不然的话都会变成0
  11. else if (i === 0 && j === 0) {
  12. dp[i][j] = 1;
  13. }
  14. // 不能再直接填充第一行和第一列为1了,因为有可能有障碍物挡着导致后面的都为0
  15. // 因此我们直接将超出外面的设为0,然后相加,也是一样的
  16. else {
  17. var top = i - 1 >= 0 ? dp[i - 1][j] : 0;
  18. var left = j - 1 >= 0 ? dp[i][j - 1] : 0;
  19. dp[i][j] = top + left;
  20. }
  21. }
  22. }
  23. return dp[m - 1][n - 1];
  24. };

今日学习时长:1.5h左右

总结:今天的障碍物卡了一下下,主要是初始化方面的东西,另外需要注意js当中二维数组的定义。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/212023
推荐阅读
相关标签
  

闽ICP备14008679号