Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何在[x]>;=[x+;1]?_Design Patterns_Series - Fatal编程技术网

Design patterns 如何在[x]>;=[x+;1]?

Design patterns 如何在[x]>;=[x+;1]?,design-patterns,series,Design Patterns,Series,我正在尝试编写一个算法,它接受一个大小为n的数组,并生成所有可能的整数值组合,最大值为size,其中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,

我正在尝试编写一个算法,它接受一个大小为n的数组,并生成所有可能的整数值组合,最大值为size,其中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


这些系列有名字吗?

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

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

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

如果n>1,它将使用n-1来递归调用自己,并且对于递归调用返回的每个结果,将生成一个或多个数组,其中包含一个额外的最左侧元素,该元素在前一个最左侧元素和max之间变化


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

有一个子例程,该子例程接受n和max并返回一组数组

如果n>1,它将使用n-1来递归调用自己,并且对于递归调用返回的每个结果,将生成一个或多个数组,其中包含一个额外的最左侧元素,该元素在前一个最左侧元素和max之间变化


如果n是1,它将返回max+1个1元素数组,其中包含从0到max的值。

我计算出来了,不需要递归

我正在为任何正在寻找我所问问题答案的人发布答案

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;
    }
}
publicstaticvoidnext(int[]数据)
{
最终int arrayLen=data.length;
int-lowestinex=0;
int lowerstvalue=数据[0];
for(int i=1;i

它遍历整个数组并找到最小值的第一次出现。该值递增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;
    }
}
publicstaticvoidnext(int[]数据)
{
最终int arrayLen=data.length;
int-lowestinex=0;
int lowerstvalue=数据[0];
for(int i=1;i

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

如果这能让你感觉好一点,我也不能把头绕过去。如果这能让你感觉好一点,我也不能把头绕过去。