要走到最下角,一共要走m-1+n-1=m+n-2
步,即從m+n-2
中挑出m-1
步向下走就可以了,或者挑出n-1
步向右走(排列組合式子等值)。那麼按照這樣,所有的走法即為
class solution:
def uniquepaths(self, m: int, n: int) -> int:
#定義計算排列組合的函式
def cheng(n):
res = 1
for i in range(n,0,-1):
res *= i
return res
#直接返回
return int(cheng(m+n-2) / (cheng(n-1) * cheng(m-1)))
建立大小為m * n
的dp表,dp[i][j]
表示走到當前位置的路徑數目。
第一行和第一列單獨考慮,均為1;
其他格仔中的動態方程為:dp[i][j] = dp[i][j-1] + dp[i-1][j]
class solution:
def uniquepaths(self, m: int, n: int) -> int:
if m == 0 or n == 0:
return 0
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[-1][-1]
時間複雜度: o(m*n)
空間複雜度: o(m * n)
Leetcode 62 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...
leetcode 62 不同路徑
時間複雜度o n2 def uniquepaths m,n 計算路徑的個數 memo 0 for j in range n for i in range m for i in range m for j in range n if i 0 and j 0 memo i j 1 elif j 0 me...
LeetCode 62 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...