Java 项目18:最大路径和I
所以基本上我对这个问题的解释如下:Java 项目18:最大路径和I,java,Java,所以基本上我对这个问题的解释如下: 3 7 4 2 4 6 8 5 9 3 应比较起点以下的两个数字,并选择较大的数字作为新数字。在这种情况下,它是3,然后是7,然后是4,然后是9。把它们加起来,得到23的答案。我编写了一个程序来实现这一点: public class ProblemEighteen { private static int pos = 1; public static void main(String[] args) { try { S
3
7 4
2 4 6
8 5 9 3
应比较起点以下的两个数字,并选择较大的数字作为新数字。在这种情况下,它是3,然后是7,然后是4,然后是9。把它们加起来,得到23的答案。我编写了一个程序来实现这一点:
public class ProblemEighteen {
private static int pos = 1;
public static void main(String[] args) {
try {
Scanner in = new Scanner(new File("Problem18Text"));
int sum = 0;
while (in.hasNextLine()) {
final String line = in.nextLine();
int big = getBiggestNum(line);
sum += big;
System.out.println(big);
}
System.out.println(sum);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static int getBiggestNum(String line) {
final String[] numbers = line.split(" ");
if (numbers.length == 1) {
pos = 1;
return Integer.parseInt(numbers[0]);
} else {
int i = 1;
int numOne = -1;
int numTwo = -1;
for (final String num : numbers) {
if (pos == i) {
numOne = Integer.parseInt(num);
} else if (pos + 1 == i) {
numTwo = Integer.parseInt(num);
}
i++;
if (numOne != -1 && numTwo != -1)
break;
}
if (numOne > numTwo) {
return numOne;
} else {
pos += 1;
return numTwo;
}
}
}
对于我上面给出的例子来说,它工作得很好,但是当我把实际的问题放进去解决时,它说我搞错了,我得到了1064。我添加了一个打印语句来查看它选择了什么数字,它根据我如何理解我试图查找的内容来确定它们是否正确,但我仍然错了。。。有人知道为什么吗?我已经有一段时间没有解决这个问题了,但是你会发现最好从三角形的底部开始,然后逐步向上。特别是当你遇到问题67时 如果按照baum的建议将数据读入数组,则会得到如下数据:
3 0 0 0
7 4 0 0
2 4 6 0
8 5 9 3
因此,从底部开始,一次取两个数字,并将总和与上面下一行的相邻数字进行比较
8 + 2 = 10 or 5 + 2 = 7. 10 is greater so replace the 2 with the 10.
5 + 4 = 9 or 9 + 4 = 13. 13 is greater so replace the 4 with the 13.
9 + 6 = 15 or 3 + 6 = 9. 15 is greater so replace the 6 with 15.
现在上移一行,执行相同的检查,直到到达最顶端,最顶端应该包含正确的答案。你真的很接近了。不太清楚它为什么不起作用,但为了让自己不那么头疼,你可能希望在开始时将整个三角形读入一个数组,而不是在整个程序中处理字符串。鲍姆:噢,哇,我感觉很好,我真的很接近了!我将把它从操作字符串改为基于数组的操作,以清除代码,然后我应该能够更轻松地诊断问题。当我从机场回来后,我会更新OP。另一个评论,但它不一定会修复它:看起来你不应该使用增强的for-for-each循环。我想你有柜台。所以只要使用一个常规的for循环,你对这个问题的解释是错误的。考虑这个三角形:1 \ N1 2 \ N9 1×2的解是11,但是您的算法给出了5。你需要从下到上阅读三角形,并使用动态编程来解决这个问题,这很简单,不是吗,但在这种情况下,你找到的是最长的路径,不熟悉Floyd的算法。如果你查看我发布的链接,你会发现Floyd的算法是一种用于加权有向图的最短路径查找算法,这基本上就是三角形。您可以修改算法中的比较,使其成为最长路径,这与您在答案中建议的非常相似