题目描述
一个机器人位于一个 m x n 网格的左上角(起始点), 机器人每一步只能向下或者向右移动一步,问到右下角总共有多少条路径?
链接:62. 不同路径 - 力扣(LeetCode) (leetcode-cn.com)
分析
网格中的一个点都只能从该点的左边和上边到来(除了最上面一行和最左边一列), 也就是说当前点的结果都是根据之前的结果计算的(这可以算作一个是否用动态规划解题的依据), 因此考虑用动态规划, 先分析是否满足动态规划的三条性质(我觉得初学者对其进行分析可以更快掌握动态规划)
无后效性
不妨用[i, j]表示网格中的某一个点。由题目可得, [i, j] 只能从[i-1, j], [i, j-1]两个点过来, 也就是说[i, j]处的路径数量取决于[i-1, j], [i, j-1]两个点的路径数量, 但与如何到这两个点无关, 且怎么到[i, j]并不影响下一步的计算, 故可以说是无后效性的
最优子结构
将题目看作是到右下角的“最多路径”条数, 那么其子问题就是到中间某个点
反证法: 不妨设[0, 0] -> [i, j] -> [m - 1, n - 1]为最多路径条数