一起来刷LeetCode

在正式刷leetcode之前,我们首先明确几个概念:

1.前置回顾:

a. 算法复杂度

2.问题类型

 

a.动态规划

思路:单纯从问题来看,这是一个非常复杂的问题,需要大量的遍历操作。分析得知:每一个位置map[i][j]只可能来自map[i][j-1]向右走一个结点或者map[i-1][j]向下走一个结点,因此只需要比较到达map[i][j-1]和到达map[i-1][j]的路径较小值加上map[i][j]就是所求答案,这时考虑使用递归,但是可知,这种递归处理属于暴力搜索的方式,因为没有对任何已经计算出来的结果进行保存和复用,因此上面这种思路是低效或者不符合要求的,应该使用动态规划来解决问题。

动态规划思想:先求简单值在逐步递推求复杂值,后面的值通过前面的结果来求得。

思路:求出到达每一个结点map[i][j]的最小路径将其保存在数组dp[i][j]中,求任意dp[i][j]的值完全依赖于dp[i-1][j]和dp[i][j-1],因此先求出dp[][]数组的第1行和第1列,然后从上到下,从左到右计算出每一个位置的结果值。

猜你喜欢

转载自blog.csdn.net/Super_Json/article/details/83018462