动态规划DP
考虑位置(i,j)。到达该位置一共有2条线路,从上面的格子(i-1,j)过来或从左边的格子(i,j-1)过来,不可能从下面的格子和右边的格子过来。所以递推公式path(i,j)=path(i-1,j)+path(i,j-1),边界条件是,(0,j)j=0,…,n-1的和(i,0)i=0,…,m-1的只有一种方式到这些点,所以dp[i][0]=1,dp[0][j]=1,然后就能推出所有情况
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
dp = [[0 for i in range(m)] for j in range(n)]
for i in range(n):
dp[i][0]=1
for j in range(m):
dp[0][j]=1
for i in range(1,n):
for j in range(1,m):
dp[i][j] = dp[i-1][j]+dp[i][j-1]
return dp[-1][-1]
数学法:
机器人一定会走(m-1)+(n-1)=m+n-2步,即从m+n-2中挑出m-1步向下走
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
return int(math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1))