解題思路
直覺想到高中數學的排列組合。套公式為 C(m+n-2, m-1),也就是 (m+n-2)! / (m-1)!(n-1)!。
寫成程式的話,必須進一步化簡計算量,模擬分母 (m+n-2)! 跟 (m-1)!, (n-1)! 中較大的數字約分,以及乘上(m-1)!, (n-1)! 中較小的數字。
可以進一步一邊乘 (top-i) 又一邊除 (i+1) 而不會說數字無法整除而有錯,背後的想法是連續整數在同樣乘或除第N個數的時候,因為連續的特性所以就能除盡。
也可以用 DP,下次試看看。
程式碼
class Solution {
public:
int uniquePaths(int m, int n) {
int top = m + n - 2;
int down = min(m, n) - 1;
long long int ans = 1;
for(int i=0; i<down; i++)
{
ans = ans * (top - i) / (i + 1);
}
return ans;
}
};
沒有留言:
張貼留言