我正在尝试计算数组中三角形的总和,您可以在其中添加下面三个数字的最大值(直接在下方,下方,一个在左下方,下方,一个在右侧)。我相信我的问题在于我在哪里/如何获得每个三角形中的行数(numRows),因为它从未更新过去3.我不知道我应该采取哪些不同的方式让它更新为我认为每当调用递归方法时它应该更新并且每次递增1,但显然不是这种情况。以下是我的代码。提前谢谢大家!
/**
*
* @author Ra'kiir
*/
public class RecursiveTriangleSum {
public static int globalRows = 0;
/**
* @param args the command line arguments
* @throws java.io.FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
int[][] tempArray = new int[][]{
{4}, //number of test cases
{3}, //start: test case 1
{1},
{1, 2},
{1, 2, 3},
{5}, //start: test case 2
{1},
{1, 3},
{3, 2, 1},
{2, 1, 3, 4},
{3, 5, 2, 4, 1},
{1}, //start: test case 3
{3},
{6}, //start: test case 4
{1},
{2, 1},
{1, 2, 3},
{4, 3, 2, 1},
{1, 2, 3, 4, 5},
{3, 4, 5, 1, 2, 3}
};
int numTestCases = tempArray[0][0];
globalRows++;
for (int z=0; z<numTestCases; z++) {
int sum = recursiveTriSum(tempArray, globalRows, 0);
System.out.println("The Sum is: " + sum);
}
} //End main method
public static int recursiveTriSum(int[][] array, int i, int j) { //i=row, j=column
// System.out.println("Recursion Runs");
int numRows = array[globalRows][0];
if (i>numRows) {
// System.out.println("IF");
return 0;
}
else {
// System.out.println("Else");
int t1 = recursiveTriSum(array, i+1, j);
int t2 = recursiveTriSum(array, i+1, j+1);
int t3 = recursiveTriSum(array, i+1, j-1);
int p1 = Math.max(t1, t2);
int p2 = array[i][j] + Math.max(p1, t3);
globalRows++;
numRows--;
return p2;
}
} //End recursiveTriSum method
} //End of Main Class
答案 0 :(得分:0)
将每个三角形迭代为:
- 获取第一行三角形,初始化变量说sum = first元素,另一个变量说index = 0
- 移动到三角形中的下一行,从索引开始并拾取下两个元素。如果第一个元素大于第二个,则不增加变量,即索引,否则增加它并将更大的值加到总和上
例如
If(array[index] > array[index+1]) sum += array[index]; else{ sum += array[index+1]; index++; }等到最后一排三角形。