13 网格路径

从一个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));
	}
  1. 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];
	
	}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值