1

我正在尝试编写一个算法,该算法采用大小为 n 的数组并生成最大大小为 max 的整数值的所有可能组合,其中位置 x 中的数字大于或等于 x+1。

因此,对于大小为 4 且最大值为 5 的数组:

{0, 0, 0, 0}
{4, 3, 2, 1}
{2, 2, 0, 0}
{5, 5, 5, 5}

都是可接受的值。

{0, 1, 2, 3}
{0, 3, 0, 0}
{6, 6, 6, 6}

无效。

对于大小为 4 且最大值为 1 的数组,这将是所有可能的组合:

{0, 0, 0, 0}
{1, 0, 0, 0}
{1, 1, 0, 0}
{1, 1, 1, 0}
{1, 1, 1, 1}

我似乎无法理解如何为 max 的任何值实现它。所以我问你们是否可以帮我一把:D

这些系列有名字吗?

4

3 回答 3

1

我解决了,不需要递归。

我正在为其他正在寻找我所问问题的答案的人发布答案。

public static void next(int[] data)
{
    final int arrayLen = data.length;
    int lowestIndex = 0;
    int lowestValue = data[0];

    for (int i = 1; i < arrayLen; i++)
    {
        if (data[i] < lowestValue)
        {
            lowestValue = data[i];
            lowestIndex = i;
        }
    }

    data[lowestIndex]++;

    for (int j = lowestIndex + 1; j < arrayLen; j++)
    {
        data[j] = 0;
    }
}

它遍历整个数组并找到最小值的第一次出现。该值加一并将其后的所有值重置为零。

于 2010-12-31T01:00:12.283 回答
0

你哪里有问题?提示:递归是您的朋友(您可以将递归用于嵌套循环,其中嵌套级别仅在运行时确定)。

于 2010-12-27T05:38:45.427 回答
0

有一个接受 n 和 max 并返回一组数组的子程序。

如果 n > 1,它会使用 n-1 递归调用自身,并且对于递归调用返回的每个结果,生成一个或多个数组,其中包含在前一个最左侧元素和最大值之间变化的附加最左侧元素。

如果 n 为 1,则返回 max+1 个包含从 0 到 max 的值的 1 元素数组。

于 2010-12-27T05:41:15.227 回答