数组观看下面的数字金字塔。用Java写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点
时间: 2024-09-20 10:01:52 浏览: 32
这是一个经典的动态规划问题,通常被称为“宽度优先搜索”或“最大路径和”。我们可以使用二维数组来存储每个位置的最大路径和,并利用左右两个相邻位置的最大值来更新当前位置的最大值。以下是使用Java编写的一个简单解决方案:
```java
public class MaxPathSum {
public static int maxPathSum(int[][] pyramid) {
if (pyramid == null || pyramid.length == 0) return 0;
int rows = pyramid.length;
int cols = pyramid[0].length;
// 初始化第一行和第一列的最大路径和为数组元素本身
for (int i = 0; i < cols; i++) {
pyramid[0][i] += pyramid[1][i];
}
for (int i = 1; i < rows; i++) {
pyramid[i][0] += pyramid[i - 1][0];
}
// 动态计算剩余部分的最大路径和
for (int i = 1; i < rows; i++) {
for (int j = 1; j < cols; j++) {
pyramid[i][j] = Math.max(pyramid[i - 1][j], pyramid[i][j - 1]) + pyramid[i][j];
}
}
// 返回最后一行的最后一列的最大路径和
return pyramid[rows - 1][cols - 1];
}
public static void main(String[] args) {
int[][] pyramid = { { 1 }, { 8, 2 }, { 23, 4, 6 }, { 33, 17, 2, 24 } };
System.out.println("The maximum path sum is: " + maxPathSum(pyramid));
}
}
```
在这个程序中,我们首先初始化第一行和第一列,然后通过两层循环逐步计算出每个位置的最大路径和。`Math.max()`函数用于选择向左或向下的路径中当前能得到更高和的那个。
阅读全文