鉴于" Jagged Array" (这是一个元素是其他数组的数组),循环遍历每个数组,返回最高值的数字路径之和。从数字中,您只能添加直接在其下方分支的两个数字中的一个。
这是一个展示规则的简单示例......
1
3 1
1 2 9
这个金字塔有四条路径可以产生四种不同的总和......
路径1:(1 + 3 + 1)= 5
路径2:(1 + 3 + 2)= 6
路径3:(1 + 1 + 2)= 4
路径4:(1 + 1 + 9)= 11
在这种情况下,我的函数返回的答案应为11。金字塔总是至少2层楼。
这是另一个视觉效果显示路径应该如何工作的例子......
/3/
\7\ 4
2 \4\ 6
8 5 \9\ 3
这个金字塔的回报应该是23.
我被告知你可以用近三行来做这件事。我从来没有使用过这种类型的数组,因为我是c#的新手。 (我也被暗示使用"递归"。不太确定。谢谢!
编辑:这是我的代码......不知道我是否正确行事。
static void Main(string[] args)
{
int sum = 0;
int[][] testArray =
{
//arrays themselves are i
new int[] {1}, //elements are j
new int[] {2, 1},
new int[] {3, 78, 7},
new int[] {1, 0, 2, 4},
new int[] {1, 2, 3, 4, 5},
new int[] {4, 5, 6, 7, 8, 9}
};
for (int i = 0; i < testArray.Length; i++)
{
for (int j = 0; j < testArray[i].Length; j++)
{
if (j > testArray[i][j])
{
sum += testArray[i][j];
Console.WriteLine(sum);
}
}
}
如果我能让逻辑在主
中工作,我会把它变成一种方法答案 0 :(得分:1)
在开发一个令人困惑的算法时,通常最好尝试将其分解成更小,更容易理解的部分。
对于您的示例,一小部分可以确定仅在其中一个级别上使用的数字。通过这种方式,您不必尝试将整个事情放在脑海中,并且实际上可以一次解决一部分问题。
如果您获得了一系列数字,您将如何确定要汇总的数字?您需要知道选择的先前索引(要传递的参数)。
有了这么小的一点,我可以编写一些代码,因为它不是非常复杂。
private int GetNextNumber(List<int> numbers, int prevIndex)
{
var first = numbers[prevIndex];
var second = numbers[prevIndex + 1];
if (first > second)
return first;
else
return second;
}
这不是您需要编写的所有程序(它也不一定是您需要编写的程序),但它是您应该如何处理问题的一个示例。