如何在[x]> = [x + 1]的数组中生成所有可能的值?

时间:2010-12-27 05:32:34

标签: design-patterns series

我正在尝试编写一个算法,该算法采用大小为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

这些系列有名字吗?

3 个答案:

答案 0 :(得分: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;
    }
}

迭代整个数组并找到最小值的第一次出现。该值递增1并将其后的所有值重置为零。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

如果n为1,则返回max + 1个1元素数组,其中包含从0到最大值

的值