leetcode 每日一题 62. 不同路径
找规律
思路:
由题意可知,由于只能向下或向右移动,所以总共只需要走(m-1)+(n-1)= m+n-2步。而只需要确定m-1步向右的步数或者确定向下的n-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))
动态规划
思路:
dp[i][j]表示从起点到 i , j 的路径数量,由题意可知dp[0][j]=1,dp[i][0]=1,在 i != 0 和 j != 0 情况下,dp[i][j] = dp[i-1][j]+dp[i][j-1]
代码:
class Solution: def uniquePaths(self, m: int, n: int) -> int: dp = [[1]*n] + [[1]+[0] * (n-1) for _ in range(m-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[-1][-1]
代码2:
由于二维数组中dp[i][j] = dp[i-1][j]+dp[i][j-1],故可采用一维数组层层滚动更新的方式。
class Solution: def uniquePaths(self, m: int, n: int) -> int: cur = [1] * n for i in range(1, m): for j in range(1, n): cur[j] += cur[j-1] return cur[-1]