一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
动态规划:
class Solution(object):
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
f = [[1] * n] + [[1] + [0] * (n - 1) for _ in range(m - 1)]
print(f)
for i in range(1, m):
for j in range(1, n):
f[i][j] = f[i - 1][j] + f[i][j - 1]
return f[m - 1][n - 1]
递归:
public int uniquePaths(int m, int n) {
return uniquePathsHelper(1, 1, m, n);
}
//第i行第j列到第m行第n列共有多少种路径
public int uniquePathsHelper(int i, int j, int m, int n) {
//边界条件的判断
if (i > m || j > n)
return 0;
if ((i == m && j == n))
return 1;
//从右边走有多少条路径
int right = uniquePathsHelper(i + 1, j, m, n);
//从下边走有多少条路径
int down = uniquePathsHelper(i, j + 1, m, n);
//返回总的路径
return right + down;
}