从一个2×2方阵的左上角出发,只允许向右或向下移动,则恰好有6条通往右下角的路径。
求在20×20的方阵,这样的路径有多少条?
思路:这个可以通过画图分析,如果等于边的时候只需要一步,如果等于终点的斜对角只需要两步,其他的要递归调用。这个结果虽然是对的,但需要运行好长时间。
方法一:坐标法,计算每个坐标经过的路径。
public class LatticePaths_13 {
public static long LatticePaths(int right,int down,int num) {
if(right == num || down == num) {
return 1;
}
else if(right == num-1 && down == num-1) {
return 2;
}
else{
return LatticePaths(right+1,down,num) + LatticePaths(right,down+1,num);
}
}
public static void main(String[] args) {
System.out.println(LatticePaths(0,0,20));
}
- line7-9,这个 else if() 可以省略,仅仅用于减少迭代的次数
方法二:计数相加法,每个点的计数就是它的两个相邻坐标的计数和
public static long LatticePaths2(int n) {
long[][] num1 = new long[n+1][n+1];
long ans = 0;
for(int i=0;i<=n;i++) {
num1[i][0]=1;
num1[0][i]=1;
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
num1[i][j] = num1[i-1][j] + num1[i][j-1];
}
}
return num1[n][n];
}