Java 欧拉11。一定有比这更好的办法

Java 欧拉11。一定有比这更好的办法,java,matrix,Java,Matrix,我正在研究Euler项目的问题,我对问题11的解决方案并不满意。有没有一种方法可以用更少的步骤或更快的速度遍历矩阵?或者,总的来说,有没有更好的方法来解决这个问题 number.txt是问题11中给出的数字矩阵 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.Scanner; 公共类项目{ 公共静态void main(字符串[]args){ int[][]矩阵=新int[20][20]; populateMatrix(矩

我正在研究Euler项目的问题,我对问题11的解决方案并不满意。有没有一种方法可以用更少的步骤或更快的速度遍历矩阵?或者,总的来说,有没有更好的方法来解决这个问题

number.txt是问题11中给出的数字矩阵

导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公共类项目{
公共静态void main(字符串[]args){
int[][]矩阵=新int[20][20];
populateMatrix(矩阵,“numbers.txt”);
System.out.println(greatestProduct(矩阵));
}
公共静态long greatestProduct(int[][]矩阵){
最终整数=4;
最终整数限制=矩阵长度-数字;
长最大值=0;
对于(int i=0;i对于(intj=0;j我能想到的一个技巧是使用事实,如果你有
a、 b,c,d,e,f你可以通过

val1 = a*b*c*d
val2 = val1*e/a
val3 = val2*f/b
但由于除法非常昂贵,我认为这比2次乘法还要糟糕。 可能还有一些其他的优步技巧会让代码变得更复杂

If a>e than a*b*c*d > b*c*d*e
但这只是一种过分的复杂化。让我们假设,由于某种原因,乘法非常缓慢。这将比记忆和表达更容易实现

a*b*c*d =  multiply(a,b)*multiply(c,d)

最后,我认为实际上乘法的速度与存储和读取速度一样快,如果不是更快的话,这意味着你的方法与其他方法一样好,但最重要的是,它可以很容易地实现这种幼稚的解决方案。

当你需要@hakre时,它在哪里?(LOL)这不应该打开吗?“或者总的来说,有没有更好的方法来解决这个问题?”不太清楚。@Josh Horowitz你有没有阅读过与这个问题相关的论坛帖子?是的。很多人都在谈论他们是如何手工搜索矩阵和“寻找大数”的
a*b*c*d =  multiply(a,b)*multiply(c,d)