1. 程式人生 > >LeetCode Unique Paths

LeetCode Unique Paths

markdown 不同的 源代碼 ber var fadein Language 動態 註意

LeetCode解題之Unique Paths


原題

機器人從起點到終點有多少條不同的路徑。僅僅能向右或者向下走。

技術分享

註意點:

  • 格子大小最大為100*100

樣例:

輸入: m = 3, n = 7

輸出: 28

解題思路

非經常見的小學生奧數題,能夠用排列組合來求解,一共要走(m-1)+(n-1)步。當中(m-1)步向下,(n-1)向右。且有公式 mCn = n!/m!(n-m)! 。那麽能夠用以下的代碼求解:

import math
class Solution(object):
    def uniquePaths(self, m, n)
:
""" :type m: int :type n: int :rtype: int """ m -= 1 n -= 1 return math.factorial(m+n) / (math.factorial(n) * math.factorial(m))

當然了,更常見的一種做法就是動態規劃。要到達一個格子僅僅有從它上面或者左邊的格子走過來,遞推關系式:dp[i][j]=dp[i-1][j]+dp[i][j-1]。初始化條件是左邊和上邊都僅僅有一條路徑。索性在初始化時把全部格子初始化為1。

AC源代碼

class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        dp = [[1 for __ in range(n)] for __ in range(m)]
        for i in range(1, n):
            for j in range(1, m):
                dp[j][i] = dp[j - 1
][i] + dp[j][i - 1] return dp[m - 1][n - 1] if __name__ == "__main__": assert Solution().uniquePaths(3, 7) == 28

歡迎查看我的Github(https://github.com/gavinfish/LeetCode-Python)來獲得相關源代碼。

LeetCode Unique Paths