问题如下:
从2×2网格的左上角开始,只能向右和向下移动,右下角有6条路线。通过20×20网格有多少这样的路线?
我的代码在这里:
public static void main(String[] args){
BigInteger twenty = factorial(new BigInteger("20"));
System.out.println(choose(twenty.add(twenty),twenty));
}
public static BigInteger choose(BigInteger n, BigInteger k){
return factorial(n).divide(factorial(n.subtract(k)).multiply(factorial(k)));
}
public static BigInteger factorial(BigInteger n){
BigInteger num = BigInteger.ONE;
if(n.equals(BigInteger.ZERO)){
return BigInteger.ONE;
}
else{
BigInteger i = BigInteger.ONE;
while (i.compareTo(new BigInteger(n+"")) <= 0){
num = num.multiply(new BigInteger(i+""));
i = i.add(BigInteger.ONE);
}
}
return num;
}
这适用于给出的示例,但当然需要很长时间来计算20x20网格的答案。我知道可能的路径等于a + b选择a。唯一的问题是我的代码需要很长时间。反正是为了提高我的计划的效率吗?