问题描述
如题
解决思路
解决这个问题主要用到了动态规划的思想,那么什么是动态规划呢?
动态规划就是把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。那么这个问题的各个阶段之间有什么联系呢,我们来一一分析。
- 1*1网格

首先解释下图中的内容都代表什么含义:
我们一网格的左上角(起点)为坐标原点,向右为m轴,向下为n轴,以每个小网格的边长为单位一,红色的数字代表从原点到该点的路线数量。
根据上面的定义,原点坐标(0,0),终点坐标(1,1)
因为只有一个网格,直接数就能数出路线数量,但是我们可以发现几条规律:
- 从原点到(0,1)和(1,0)只有一条路线
- 到达终点(1,1)的上一步只有(0,1)和(1,0)
- 到达终点(1,1)的线路数等于到达(0,1)和(1,0)的线路数之和
我们根据这三条规律将网格扩展一下
- 3*3网格

根据我们之前得到的三条规律,无论网格是几乘几的,只要m=0或n=0,路线条数都为1,首先我们可以将这些点的路线条数初始为1,既然(1,1)的线路条数等于(0,1)与(1,0)线路条数的和,那么(1,2)的线路条数不就是(0,2)与(1,1)的线路条数的和吗,所以我们就能把每个点的线路条数都写出来了
- m*n网格

本文通过动态规划解决从m行n列网格的左上角走到右下角的不同路线数量。介绍了解题思路,包括1*1和3*3网格的分析,并给出求m*n网格的步骤,最后讨论了递归和循环的代码实现方式。
5202

被折叠的 条评论
为什么被折叠?



