leetcode : Unique Paths
runtime 0 ms, beats 100% of cpp submissions
O(min(m,n)) solution with explanation
tags: math
🔗 link
📖 description
給定兩個數字表示一個 2 維陣列,請求所有從 (0,0) 到 (m,n) 的路徑數量,且只能向下或右走。
ex. Input: m = 3, n = 7 Output: 28
🧠 solution
本題可以使用 dp 的方法,維護一個 2 維陣列,*(i,j)* 內的數值表示從 (0,0) 到 (i,j) 可以走的路徑總數,最後只需要回傳 (m-1,n-1) 的數值即可。
但實際上我們可以利用數學的想法來解題。
1. Right -> Down -> Down 2. Down -> Down -> Right 3. Down -> Right -> Down 因為只能向下或右走,所以可以採取的動作是固定的,此時可以使用重複組合的概念 路徑總數為 3!/(2!*1!)
⏳ time complexity
挑選最短的一邊,然後取 nCr 即可,時間複雜度 O(min(m,n))
總時間複雜度 O(min(m,n))
📝 code
1 | class Solution { |