代码随想录训练营第三十四天| 62.不同路径 63. 不同路径 II

 62.不同路径   

题目链接:62. 不同路径 - 力扣(LeetCode)

讲解链接:代码随想录

动态规划五步走

1 定义dp数组是到dp[i][j]时有dp[i][j]条路径

dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。

2 找递推公式 

从题目中知道 dp[i][j]只能从上方或者左方来 所以当前路径数 = 上方路径数 + 左方路径数

就是这一行 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

3 初始化dp 因为只能向下或者向左走 那其实在0行i列和0行j列都只能从起点开始并且到达当前位置的路径只能是1 所以 dp[0][j] =1; dp[i][0] =1;

4 确定遍历顺序 那就直接从前往后 有固定值 也不会有空值

5 推导一下 发现结果如图(代码随想录):

Java代码:

class Solution{
    public static int uniquePaths(int m, int n){
        int[][] dp = new int[m][n];
        //初始化
        for(int i = 0; i < m; i++){
            dp[i][0] = 1;
        }
        for(int i = 0; i < n; i++){
            dp[0][i] = 1;
        }
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
}

 63. 不同路径 II   

题目链接:

讲解链接:

 和上题思路一致 但是需要考虑障碍物位置 

障碍物在 起点 在 终点 在 遍历过程中的情况 grid[i][j] = 1代表当前位置有障碍物 

一旦有 则 在初始化dp[0][j] 和 dp[i][0](第一行和第一列的值)需要停下 而且在其障碍物以后的路径数为0

在递推公式里加了判断当前位置是否为障碍物

 dp[i][j] = (grid[i][j] == 0) ? dp[i - 1][j] + dp[i][j - 1] : 0;

Java代码:

class Solution{
    public int uniquePathsWithObstacles(int[][] grid){
        int m = grid.length;
        int n = grid[0].length;
        int[][] dp = new int[m][n];
        
        //如果在起点或终点出现障碍 直接返回0
        if(grid[m - 1][n - 1] == 1 || grid[0][0] == 1){
            return 0;
        }
        for(int i = 0; i < m && grid[i][0] == 0; i++){
            dp[i][0] = 1;
        }
        for(int j = 0; j < n && grid[0][j] == 0; j++){
            dp[0][j] = 1;
        }
        
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                dp[i][j] = (grid[i][j] == 0) ? dp[i - 1][j] + dp[i][j - 1] : 0;
            }
        }
        return dp[m - 1][n - 1];
    }
}

 打卡打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值