LeetCode Unique Paths
阿新 • • 發佈:2017-07-27
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