1

Matrix中的path问题:
62.Unique Paths
63.Unique Paths II
这两题是典型的dp问题,要求一共有多少种方案。分析状态f(i, j)是走到(i, j)总共的路径。它可以由前面两个状态得到,即f(i, j)=f(i - 1, j) + f(i, j - 1)。最后注意边界值即可。变形是有设obstacle, 那么遇到obstacle的时候,把当前可行路径设为0即可。

64.Minimum Path Sum
这一题在上一题的基础上变形,之前要求path个数,现在要求minimum sum。同样分析状态f(i, j)是走到(i, j)时的最小sum。它可以由前面两个状态得到,即f(i, j)=min(f(i - 1, j), f(i, j - 1)) + value(i, j)。还是注意边界值就可以了。

174.Dungeon Game
这一题有点思维上有些跳跃,但万变不离其宗。我要保证它不死,就要保证最后走完至少还剩下一滴血。所以从后往前计算会比较方便。当遇到需要血量小于1的时候,我们还是按1来算,因为是反过来算,所以不管当前这一次可以给我们加多少血量,之前那一步的算完的时候,到少来行有1。

329.Longest Increasing Path in a Matrix
这是一个DFS的问题,我要求最长增长路径,那我就得每个点都试一下。优化是当我走到一个点时,我如果已经计算过这个点,那么我就把计算好的值存起来。如果有一个点在计算最长增长路径时经过这个点,就可以直接用存好的值,而不是再计算一遍。

361.Bomb Enemy
这个问题最重要是关注新起一行或者一列和当w出现的时候,从开始到w出现之前,每个同一行,同一列的数遇到的enermy都是相同的,但是当w出现隔断之后,我们就必须重新计算从w开始,到下一个w之间有多少enermy了。

Binary Tree中的path问题
112.Path Sum
113.Path Sum II
这两个一个就boolean, 一个要求输出所有结果。相同点是都到从上向下扫出结果,不同点是boolean扫到一个正解就可以返回true,可以用dfs,而另一个要把所有的都扫一遍,存到结果中输出,典型的dfs + backtracking问题。

124.Binary Tree Maximum Path Sum
这不是用dfs做,分两种可能,一种可能是一个single path中出现了最大和,另一种可能是左右子树和母节点共同构成最大和。就这两种情况分别计算。
257.Binary Tree Paths
这就是个dfs问题。


guoluona
199 声望14 粉丝

引用和评论

0 条评论