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]

 

 

 

 

 

 

 

 

 

posted @ 2020-06-06 15:21  nil_f  阅读(113)  评论(0编辑  收藏  举报