明天字节第4次面试了,我的直觉告诉我百分百有动态规划,之前一直云里雾里,但刚刚看了一篇文章后豁然开朗了,我宣布动态规划已经被我秃头鱼斩落马下了,以后见一道杀一道。开窍文章地址:juejin.cn/post/684490…
- 首先明确dp[i]或者dp[i][j]的意义,比如跳青蛙,dp[i]就是到i阶有多少种跳法,二维的机器人dp[i][j]就是走到矩阵i行j列多少条路径,或者最短路径多少
- 找出关系式,动态规划就是把大问题分解为各个小问题,直至回溯到初始条件,dp[i]和dp[i-1]、dp[i-2]...这些存在着某种关系式,青蛙就是dp[i]=dp[i-1]+dp[i-2],dp[i-1][j]、dp[i][j-1]和dp[i][j]也存在着某种关系式,找出关系式。
- 找出初始条件,都是从0开始的,如果关系式是dp[i]=dp[i-1]+dp[i-2],那就要先找出dp[0]和dp[1],不然会出现索引为负的情况,然后开始循环通过关系式求出dp[i]