我需要计算多维数组的总和。不需要额外的空间,也不需要递归。
class MultiDimensionArray {
// This is a provided function, Assume it works
public static Long getValue(int... indexOfDimension) {
//...
return value;
}
// lengthOfDeminsion: each dimension's length, assume it is valid: lengthOfDeminsion[i]>0.
public static Long sum(MultiDimensionArray mArray, int[] lengthOfDeminsion) {
...
return sum;
}
如何实现sum()方法?好像我需要实现一个" n级嵌套循环"。
for() {
for () {
...
}
}
我可以通过递归来做到这一点,但如果没有递归,我真的不知道如何实现这一点。
答案 0 :(得分:1)
我不清楚没有多余的空间意味着什么。但我的想法是分配一个n元组(n =数字维度)和一些辅助变量。
int n = lengthOfDimension.Length;
int[] tuple = new int[n]; // all zeroes
int at = n-2;
Long sum = 0;
do
{
for (tuple[n-1] = 0; tuple[n-1] < lengthOfDimension[n-1]; tuple[n-1]++)
{
sum += getValue(tuple);
}
while (at >= 0 && ++tuple[at] == lengthOfDimension[at])
{
tuple[at--] = 0;
}
if (at >= 0) at = n-2;
}
while (at >= 0);
这里的工作马是for循环,迭代超立方体的最低维度,使用元组选择正确的行。 随后,元组中的值将递增,直到命中相应的维度长度,其中值被重置为零并且下一个更高的值(at-1)递增。当元组[0]已经包装时,任务完成。