62.不同路径
😄62.不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
思路
基本思想
机器人只能向右下角走,只能向右或者向下走,到达某一网格的方式由其上方和左方的网格决定,也就是f(m,n)=f(m-1,n)+f(m,n-1)
,其中f(m-1,n)
代表左方的网格,f(m,n-1)
代表上方的网格
所以只需要从头开始遍历,统计每一个到达每一个网格的路径数,当最终统计到finish
时,就可以返回答案
主要是理解递归公式,并且需要初始化,
执行流程
- 初始化一个二维vector,二维vector中的每一个元素都是一个一维vector,所以初始化的语句为:
|
|
学会这种初始化的方式
- 将第一行和第一列的路径数都初始化为1,因为他们要么只能向右,要么只能向下
- 从第二行第二列的网格开始进行统计,利用递推公式更新,最终返回结果
代码
根据以上分析,得出一下代码:
|
|
总结
关键是推导出递推公式和第一行第一列的初始化,处理完之后就可以直接进行统计,暴力的将所有的网格路径数都统计出来,因为到达(M,N)的路径数需要依赖于前面的路径数
最终返回(m,n)的路径数就是最终的结果