迭代数组中的值

时间:2015-10-26 17:22:57

标签: c# arrays

如果我有一个可变长度[n]的整数数组,则可以迭代它,以便每个值仅在下一个值达到n-1时递增。

例如,如果n = 3:

int[] intArray = {0, 0, 0};

增加intArray [],使得:

intArray = {0, 0, 1}
intArray = {0, 0, 2}
intArray = {0, 1, 0}
intArray = {0, 1, 1}
intArray = {0, 1, 2}
intArray = {0, 2, 0}
intArray = {0, 2, 1}
intArray = {0, 2, 2}
intArray = {1, 0, 0}
intArray = {1, 0, 1}
...
intArray = {2, 2, 2}

1 个答案:

答案 0 :(得分:4)

有助于思考问题中的模式 - 有时候他们会建议可能很容易分解和实施的一般解决方案。

在这种情况下,数组内容的作用类似于base-n数字(具体示例中为base-3)。所以你可以考虑一个递增任意数字基的算法,一旦你继续编码就可以了。

一个“递增”base-n数字的函数将从递增最低有效数字并检查溢出开始。在base-10中,我们将保留0,并将1带到下一个最高有效位。在任意数字基数中,这与将数字重置为零并递增下一个最高有效数字相同。

有特殊情况需要考虑。如果要求您在数字基础中增加“maxint”,例如{2, 2, 2}?你会添加另一个有效数字吗?你会将值固定在“maxint”,还是换行到0?你会抛出异常吗?除非你已经有规范,否则没有“正确”的答案。

在伪代码中,这是一个想法:

increment( digits  , base ) {
 for (place=digits.length - 1; place >= 0; place-- ) {
   digit = digits[place]++;  // increment digit in this place
   if (digit < base)
    break;
   else
    digit = 0; // overflowed, so "wrap" to zero, increment next place
 }
 return digits;
}