多维数组的总和

时间:2017-09-17 22:12:26

标签: algorithm multidimensional-array data-structures

我需要计算多维数组的总和。不需要额外的空间,也不需要递归。

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 () {
        ...  
    }
}

我可以通过递归来做到这一点,但如果没有递归,我真的不知道如何实现这一点。

1 个答案:

答案 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]已经包装时,任务完成。