1. question: 不同路径(中等)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-paths
示例 1:
1 | 输入:m = 3, n = 7 |
示例 2:
1 | 输入:m = 3, n = 2 |
示例 3:
1 | 输入:m = 7, n = 3 |
示例 4:
1 | 输入:m = 3, n = 3 |
提示:
1 | 1 <= m, n <= 100 |
2. answers
这道题可以看成是动态规划的进阶题,和前面的爬楼梯明显不是一个等级的,将动态规划的递推公式,由一维变成了二维,不能仅靠两个变量来保存前面步骤的结果值。
同样,先逆推一下。每个位置都可由该位置的上面一个位置,和该位置的左边一个位置到达。因此,只需要获得该位置左侧位置的路径总和 和 该位置上面位置的路径总和,即可求得本位置的路径总和,即Path[m,n] = Path[m-1, n] + Path[m, n-1]
。但是注意,下标一定是大于等于0的,即在正区间。对于[x, 0]的位置,只能由左边的位置到达;对于[0, x]的位置,只能由上面的位置到达。
另外,前面提到了,这是二维的位置,所以说,简单两个变量无法保存所需的值,需要设置一个二维数组保存。
1 | public class Solution_0114 { |
3. 备注
参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com),代码随想录 (programmercarl.com)。