62. Unique Paths
題目網址:https://leetcode.cn/problems/unique-paths/
題意:有一機器人位於
m x n
網格的左上角, 機器人每次只能往下 or 往右一步, 機器人試圖抵達網格的右下角, 求總共幾條不同的路徑。
Solution 1:
想法:利用 DP, 定義
dp[i][j]
為從起點到(i, j)
的方法數, 其中第一列和第一行方法數皆初始化為1
(因為只能往下、右移動)。要避免重複計算(圖中橘色圈起來的部分),dp[i][j] = 其左邊格子的方法數 + 上方格子的方法數
➔ 得到dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
class Solution { |
- time:$O(m \cdot n)$ ➔ for loop
- space:$O(m \cdot n)$ ➔
dp
Solution 2:
想法:改進 Solution 1, 因為
dp[i][j]
只會用到同一列的dp[i][j - 1]
和上一列dp[i - 1][j]
, 故不需要開到 $O(m \cdot n)$ space, 只需開到 $O(n)$
class Solution { |
- time:$O(m \cdot n)$ ➔ for loop
- space:$O(n)$ ➔
dp
和nextRow
Solution 3:
想法:用到排列組合數學, 總共要走
m - 1
個⇩
和n - 1
個⇨
, 可看成不盡相異物排列$\binom{(m-1)+(n-1)}{m-1} = \binom{m+n-2}{m-1} = \dfrac{(m+n-2)(m+n-3) … n}{(m-1)(m-2) … 1}$
$= \dfrac{n}{1} \cdot \dfrac{n + 1}{2} … \dfrac{m+n-3}{m-2} \cdot \dfrac{m+n-2}{m-1}$
其中,$\binom{m+n-2}{m-1} = \binom{m+n-2}{n-1}$,故可以取
r = min(m, n)
來簡化計算
- 若
r
取m
,則分子 - 分母 = n - 1
- 若
r
取n
,則分子 - 分母 = m - 1
令
分母 = i = [0, r - 1]
,k = m + n - 2
,則分子 = k - r + i
class Solution { |
- time:$O(min(m, n))$ ➔ for loop
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論