设m行n列的网格,求从左上角走到右下角的不同路线条数,只能向右走或向下走,每次走一步

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

问题描述

如题

解决思路

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

  1. 1*1网格

1*1网格
首先解释下图中的内容都代表什么含义:

我们一网格的左上角(起点)为坐标原点,向右为m轴,向下为n轴,以每个小网格的边长为单位一,红色的数字代表从原点到该点的路线数量。

根据上面的定义,原点坐标(0,0),终点坐标(1,1)

因为只有一个网格,直接数就能数出路线数量,但是我们可以发现几条规律:

  • 从原点到(0,1)和(1,0)只有一条路线
  • 到达终点(1,1)的上一步只有(0,1)和(1,0)
  • 到达终点(1,1)的线路数等于到达(0,1)和(1,0)的线路数之和

我们根据这三条规律将网格扩展一下

  1. 3*3网格

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

  1. m*n网格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值