题目意思
统计从左上角到右下角的所有不同路径个数。
思路一:直接使用递归
因为从第一步走到第二步,和从第二步走到第三步,问题的模型是一样,有一样的结构。思路二:动态规划,思路一的话,会超时,因为要计算很多重复的字路径。动态规划就是新建一个跟原来大小一样的二维数组,从右下角开始计算每一个方格到右下角的路径数。这样就可以重复利用子路径。
很经典的动态规划题目 使用从底到上的思路
思路一代码:
int sum=0,tm=0,tn=0;
public int uniquePaths(int m, int n) {
tm=m;
tn=n;
recursion(0,0);
return sum;
}
public void recursion(int m,int n){
if(m==tm-1&&n==tn-1){
sum++;
return;
}
boolean flag=false;
if(n<tn-1){
flag=true;
n++;
recursion(m,n);
}
if(m<tm-1){
if(flag)
n--;
m++;
recursion(m,n);
}
}
思路二代码:这个是通过了的
public int uniquePaths(int m, int n) {
int[][] a=new int[m][n];
a[m-1][n-1]=1;
for(int row=m-1;row>=0;row--){
for(int col=n-1;col>=0;col--){
if(row==m-1&&col==n-1)
continue;
if(row==m-1)
a[row][col]=a[row][col+1];
else if(col==n-1)
a[row][col]=a[row+1][col];
else
a[row][col]=a[row][col+1]+a[row+1][col];
}
}
return a[0][0];
}