代码随想录算法训练营第三十九天|不同路径,不同路径II

62. 不同路径

力扣

1. 确定dp数组及下标含义

dp[i][j] 的定义:到达(i,j) 的不同方法总数

1 1 1 1

1 2 3 4

1 3 6 10

1 4 10 20...

2. 递推公式:

dp[i][j] = dp[i-1][j] + dp[i][j-1]

从【上一个点】到dp[i][j]有且只有两种方法:

dp[i-1][j] + 往下走

dp[i][j-1] + 往右走

所以dp[i][j]的所有可能性就是这两者之和!类似爬楼梯

注意:二维dp数组很可能与相邻的位置产生关系

3. dp数组如何初始化:

初始化的内容:带入一个最小可能i和j到递推公式里(i=1,j=1),看此时需要“已知”(即不能从别的地方推出来)的值是什么(dp[0][1] & dp[1][0])。注意此时只要dp[x][y]的x和y任意一个是0,都需要初始化,因为不能从别的地方推出来

4. 遍历顺序:从前向后

注意遍历从【初始化后】的点开始!

如果初始化了i=0,j=1,就从i=1, j=1开始

⚠️:如何初始化二维数组:dp = [[0] * n for _ in range(m)]

n 为列数,m为行数

注意写代码的顺序是:先初始化,然后递推公式

63. 不同路径II

力扣

和上一题的区别:有obstacle

把到达障碍格的dp[i][j]标为0即可

⚠️:注意特殊情况:

1. 障碍在起点或终点时:直接返回0

2. 障碍在左边界或上边界的任意一点:则这一点【及之后】的该边界的dp值均为0(因为边界只能这个方向走,且绕不过这个点)

方法:在初始化时找到这个点后,break即可,因为最最开始初始化二维数组的时候值都为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值