解法一:
利用递归进行求解 , s[m][n] = s[m-1][n]+s[m][n-1],注意当m或者n等于1的边界情况 ,此方法在leetcode上超时
public int uniquePaths(int m, int n) {
if (m == 0 || n == 0)
return 0;
if (m == 1 && n == 1) {
return 1;
}
if (m == 1) {
return uniquePaths(m, n - 1);
} else if (n == 1) {
return uniquePaths(m - 1, n);
} else
return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}
解法二:
利用动态规划求解,设一个临时数组,temp[m][n] , 保存结果
public int uniquePaths_dp(int m, int n) {
if (m == 0 || n == 0)
return 0;
int[][] temp = new int[m + 1][n + 1];
for (int i = 1; i < m + 1; i++) {
for (int j = 1; j < n + 1; j++) {
if(i!=1&&j!=1){
temp[i][j] = temp[i-1][j]+temp[i][j-1];
}
else{
temp[i][j] = 1;
}
}
}
return temp[m][n];
}