迭代数组中的值

本文关键字:数组 迭代 | 更新日期: 2023-09-27 18:19:22

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

例如,如果n=3:

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

increment intArray[] such:

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}

迭代数组中的值

在你的问题中思考模式会有帮助——有时它们会提出一般的解决方案,这些解决方案可能很容易分解和实现。

在这种情况下,数组内容表现为以n为基数的数字(在特定示例中为以3为基数)。因此,你可以考虑一种算法来增加任意数字基数,一旦你有了,继续编码它。

一个将以n为基数的数"递增"的函数将从最低有效位数开始递增并检查是否溢出。在以10为基数的情况下,我们将保留0,并将1进位到下一位最高有效数字。在任意的数字进制中,这相当于将该数字重置为0,并将下一位最高有效数字加1。

有一些特殊情况需要考虑。如果你被要求增加你的数字基数的"最大值",例如{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;
}