代码随想录冲冲冲 Day34 动态规划Part2

62. 不同路径

dp数组:dp数组定义为二位数组 记录整个路程中的所有点

初始化:第一列和第一行都是1,因为只能向右或向下走

递归公式: 任何一个点都是由上方点和左方点相加得到

遍历顺序:遍历从左到右 从上到下 由点1,1开始

63. 不同路径 II

dp数组:dp数组定义为二位数组 记录整个路程中的所有点

初始化:第一列和第一行当obstacleGrid没遇到1之前dp数组都是1,遇到之后全是0,因为只能向右或向下走,如果最右下角或者左上角有障碍,return 0

递归公式: 任何一个点都是由上方点和左方点相加得到,但如果这个点的的坐标在obstacleGrid中==1,也就是有障碍,直接continue(终止后续)

遍历顺序:遍历从左到右 从上到下 由点1,1开始

343. 整数拆分

dp数组:每一个数字的最大乘积

初始化:dp[0] 没有意义 dp[1] == 1 dp[2] ==1;

递归公式:以下三种的最大值

1.j(i-j) j为第一个数字 i-j为第二个数字

2.j*dp[i-j] 大于两个的情况, j = 第一个数字 dp[i-j] 后面无论是分成几个数字相乘得到的最大值

3.dp[i] dp[i] 本身的值假如在之前j =1 得到的值要比 j =2得到的值更大 就不更新了

遍历顺序:第一层 i = 3 到 n,代表dp中每个dp[i] 的值

第二层 j = 1 到 i/2 代表对于数字的拆分,由于两个数相乘越相似 乘积越大 所以 i = 1 到 i/2为止就是最大的情况了

96. 不同的二叉搜索树

dp数组:用来存 1 - n个节点的二叉树种类数

初始化:dp [0] =1,就空数

递归公式:dp[i] += dp[j] * dp[i - j-1;

j代表左边树有多少种 i-j-1代表右边树有多少种 -1是其中作为根节点的的一个

遍历顺序:

i从1 -> n 分别代表1 ->n个节点

j从0->i 代表左节点数 因为最多左数会有i-1个数 而且这种情况下 没有右树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值