解决项目Euler 15效率问题

时间:2018-04-15 21:44:03

标签: java

问题如下:

  

从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。唯一的问题是我的代码需要很长时间。反正是为了提高我的计划的效率吗?

0 个答案:

没有答案