1. 程式人生 > 實用技巧 >UNCTF2020-crypto:wing

UNCTF2020-crypto:wing

技術標籤:數論LeetCode

LeetCode 62 不同路徑

題目連結

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。

問總共有多少條不同的路徑?

示例 1:
在這裡插入圖片描述

輸入:m = 3, n = 7
輸出:28

示例 2:

輸入:m = 3, n = 2
輸出:3
解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 ->
向右

示例 3:

輸入:m = 7, n = 3
輸出:28

示例 4:

輸入:m = 3, n = 3
輸出:6

簡單數學題,答案就是 C m + n − 2 n − 1 C_{m+n-2}^{n-1} Cm+n2n1,也比較好想,從上走到下有 m − 1 m-1 m1 步,從左走到右有 n − 1 n-1 n1 步,所以相當於只要從 m + n − 2 m+n-2 m+n2 裡面挑 m − 1 m-1 m1 步或 n − 1 n-1 n1 步即可,C會爆 longlong,建議用 py,AC程式碼如下:

class Solution:
    def uniquePaths
(self, m: int, n: int) -> int: x=m+n-2 y=m-1 ans=1 for i in range(x-y+1,x+1): ans*=i for i in range(1,y+1): ans//=i return ans