62.不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
示例1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1.向右 -> 向右 -> 向下
2.向右 -> 向下 -> 向右
3.向下 -> 向右 -> 向右
示例2:
输入: m = 7, n = 3
输出: 28
解题思路:
利用深度优先遍历
递归实现
因为机器人只能够向右或者向下
所以递归时应为i+1(向下走)
j+1(向右走)
step记录步数
成功步数应为(m+n-2)
如果step>(m+n-2),不符题意
如果遍历i=m-1,j=n-1,表明到达终点
sum++
代码:
/** *作者:魏宝航 *2020年11月27日,下午21:08 */ class Solution { int sum=0; int m1,n1; public int uniquePaths(int m, int n) { m1=m; n1=n; dfs(0,0,0); return sum; } public void dfs(int i,int j,int step){ if(i==m1||j==n1||step>(m1+n1-2)){ return; } if(i==m1-1&&j==n1-1){ sum++; return; } dfs(i+1,j,step+1); dfs(i,j+1,step+1); } }