leetcode 62. 不同路徑——組合數程式碼實現
阿新 • • 發佈:2020-12-14
技術標籤:# 刷題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
不能保證不溢位。