经典永流传 t[3] = t[2] + t[1]的经典induction;
虽然一步递归直接出很简单 但是还按照总结的步骤写
1.dp数组记录当前数字
2.递推公式为F(n) = F(n-1) + F(n-2)
3.初始化 F 0 = 0 F 1 = 1;
4.遍历顺序直接从前到后
5.由于直接用两个就可以了 所以更新dp[2]就可以了
跟上非常类似,到第三个阶梯的方式就是第一个方式+第二个的方式
唯一不一样的是初始化 dp 0 = 1 dp 1 = 2
后续都一样
version 1 :
1.dp数组代表到每一个 i 最小花费是多少
2.递推公式: 到第三个节点的最小花费 = min(前两个的最小花费 + cost[i])
3.初始化 F 0 = 0 F 1 = 0;因为这个题目的第一步其实没有花费 所以无论是 0 还是 1 都是0
4.遍历顺序直接从前到后,中间需要更新第i个的最小花费
5.省略
注意的是 走完其实是走到最后一个元素再之后一个 所以dp大小是cost.size() + 1 返回值当然也就是dp[cost.size()],如果dp大小是cost.size() 那就要返回最后一步的比较逻辑min(.....);
version 2:省空间
1.dp数组代表到每一个 i 最小花费走到下一个位置
2.递推公式: 第三个节点走到一下个节点的最小花费 = min(前两个的最小花费 )+ 第三个节点本身的花费
3.初始化 F 0 = cost[0] F 1 = cost[1];
4.遍历顺序直接从前到后,dp[0] 和 dp[1]
5.省略
最后返回的min(dp0,dp1)也就是倒数这两个节点哪个哪个走完需要的花费最小
当然也就是走完最小的