看到与路径规划相关的题目我们首先应该想到的就是动态规划,动态规划解决不了的问题再考虑使用二叉树搜索,树搜索采用穷尽搜索所有路径,尽管可添加剪枝的策略,但在效率上和可理解性上还是不如动态规划的。动态规划的总体思路是以空间换时间,如下面的两个题中,我们都使用与输入数组相同大小的数组记录每个位置的可达路径数,然后遍历一次数组即可。另外,动态规划最最重要的就是找到递推公式,找准了公式,题就出来一半了。话不多说,直接上题:
一、leetcode第62题——不同路径
一个机器人位于一个 m ∗ n m * n m∗n 网格的左上角 (起始点在下图中标记为 “Start” ), 1 ≤ m , n ≤ 100 1 ≤ m, n ≤ 100 1≤m,n≤100。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?
示例:
输入:m = 3, n = 7
输出:28
解题思路
1.用一个 m ∗ n m*n m∗n的二维数组 d p [ m ] [ n ] dp[m][n]