第九章 动态规划part02(● 62.不同路径 ● 63. 不同路径 II )

学习目标:

● 62.不同路径
● 63. 不同路径 II


学习内容:● 62.不同路径

https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html
视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu
tip:
1.机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。
按照动规五部曲来分析:
1.确定dp数组(dp table)以及下标的含义
dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
2.确定递推公式
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
3.dp数组的初始化
dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;
4.确定遍历顺序
从上到下,从左到右

var uniquePaths = function(m, n) {
    let dp=[]
    for(let i=0;i<m;i++) dp[i,0]=1
    for(let j=0;j<n;j++) dp[0,j]=1
    for(let i=1;i<m;i++){
        for(let j=1;j<n;j++){
            dp[i,j]= dp[i-1,j]+dp[i,j-1]
        }
    }
    return dp[m-1,n-1]
};

学习内容:● 63. 不同路径 II

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

const m = obstacleGrid.length
const n = obstacleGrid[0].length
const dp = Array(m).fill().map(item => Array(n).fill(0))
dp[i][j]//注意书写形式不能写成dp[i,j]
初始化,不同点,如果初始化遇到拦截,后面都为0
遍历过程中是拦截,dp[i][j]路径为0
var uniquePathsWithObstacles = function(obstacleGrid) {
     const dp=Array(obstacleGrid.length).fill().map(item => Array(obstacleGrid[0].length).fill(0))
    for(let i=0;i<obstacleGrid.length&&obstacleGrid[i][0]==0;++i){
        dp[i][0] = 1
    }
    for(let j=0;j<obstacleGrid[0].length&&obstacleGrid[0][j]==0;++j){
        dp[0][j] = 1
    }
    for(let i=1;i<obstacleGrid.length;++i){
        for(let j=1;j<obstacleGrid[0].length;++j){
            dp[i][j] = obstacleGrid[i][j] === 1 ? 0 : dp[i - 1][j] + dp[i][j - 1]
        }
    }
    return dp[obstacleGrid.length - 1][obstacleGrid[0].length - 1]
};

你可能感兴趣的:(算法笔记,动态规划)