1. 程式人生 > 其它 >leetcode 62. 不同路徑——組合數程式碼實現

leetcode 62. 不同路徑——組合數程式碼實現

技術標籤:# 刷題leetcode演算法

組合數程式碼實現

今天遇到了一個題目就是機器人在矩形陣列中移動,每次只能向右或向下移動,問從左上角到右下角有多少種走法。

老生常談,要麼dp,要麼用組合數解。

但是在用組合數解的時候,基本上是鐵定溢位的,不能像個白痴一樣硬套公式求階乘。在這裡插入圖片描述在這裡插入圖片描述

方法1 語言自帶的組合數求解器

方法2 程式碼實現

int uniquePaths(int m, int n) {
        int M = (m < n ? m : n) - 1;
        int N = m + n - 2;
        long long ans = 1;
        for
(int i=1;i<=M;++i) { ans = ans * (N - i + 1) / i; } return ans; }

注意迴圈那裡,n的階乘除以(n-m)的階乘後,剩下要計算的次數恰好是m次。n*(n-1)*(n-2)*(n-m+1)
但是這裡還是有可能溢位的,因此儘量使用long long型別,但具體還是要看資料範圍,long long不能保證不溢位。