如题
拿到题目第一个思路是从终点出发,分别进行列数-1或者行数-1,即
uniquePaths(m,n-1)+uniquePaths(m-1,n)。然后再对边界进行下控制。
如下代码:
public static int uniquePaths(int m, int n) {
if(n==1&&m==1){
return 1;
}else if (n>1&&m>1){
return uniquePaths(m,n-1)+uniquePaths(m-1,n);
}else if(n>1&&m==1){
return uniquePaths(m,n-1);
}else {
return uniquePaths(m-1,n);
}
}
思路很简单,但是由于递归倒致时间消耗太大!
所以采用二维数组,每一个元素值的意思为:从Robot起点到该点所有可能路径的条数总和,这样一路存储下来,最终把数组最后一个元素返回即可,代码如下:
public static int uniquePaths(int m, int n) {
int [][]dp=new int[n][m];
for (int i=0;i<n;i++){
dp[i][0]=1;
}
for (int i=0;i<m;i++){
dp[0][i]=1;
}
int r=n-1,c=m-1;
for (int i=1;i<n;i++){
for (int j=1;j<m;j++){
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[r][c];
}
希望能帮助到大家!