题目链接: Leetcode 62. Unique Paths
注意: 下面的代码直接采用的是公式计算,需要注意数值类型的存储。
代码:
public class Solution {
public int uniquePaths(int m, int n) {
m--;
n--;
int c;
if(m<n){
c=m;
}else{
c=n;
}
if(c==0) return 1;
double res = 1;
for(int i=1;i<=c;i++){
res = (res*(m+n+1-i))/i;
}
return (int)res;
/*
int up = 1;
int down = 1;
// too big!
for(int i=0;i<c;i++){
up *= m+n-i;
down *= c-i;
}
return up/down;
*/
}
}
更正规的解法当然是动态规划解法,这个例子应该是本科算法上讲动态规划的范例。
public class Solution {
public int uniquePaths(int m, int n) {
if(m==1||n==1) return 1;
int[][] dp = new int[m][n];
dp[0][0] = 1;
for(int i=0;i<m;i++){
dp[i][0] =1;
}
for(int i=0;i<n;i++){
dp[0][i] =1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
}