题目描述:
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明:m 和 n 的值均不超过 100。
示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
输入: m = 7, n = 3
输出: 28
Solution1:
因为从左上角走到右下角只能是往右或者往下走,而往右走或者往下走的步数以及总步数是确定的,即总步数是m+n-2,往右走是m-1步,往下走是n-1步。比如7*3的网格,往右走的步数肯定是6,往下走的步数肯定是2...因此最后结果是肯定的了,即 或 ,时间复杂度为O(1),空间复杂度O(1)
Solution2:动态规划
CODE:
class Solution:
def uniquePaths(self,m,n):
'''
:param m: int
:param n: int
:return: int
'''
if m * n == 0:
return 0
if m == 1 or n == 1:
return 1
dp = [[0] * n for _ in range(m)]
for i in range(m):
dp[i][0] = 1
for j in range(n):
dp[0][j] = 1
for i in range(1,m):
for j in range(1,n):
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
return dp[m-1][n-1]