我正在尝试编写一个算法,该算法采用大小为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
这些系列有名字吗?
答案 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到最大值
的值