【发布时间】:2021-11-24 08:38:27
【问题描述】:
所以我有一个连续开始的 k 个元素的数组,例如 0 1 2
我试图让它上升到某个值,比如 4,最终得到
- 0 1 2
- 0 1 3
- 0 1 4
- 0 2 3
- 0 2 4
- 0 3 4
我理解每次数组中的最后一个元素达到最大值时,它必须增加前一个索引并将当前索引设置为前一个索引的值+1,如果前一个索引的值达到少1的最大值,我们重复上一个索引的步骤,依此类推
但我不确定如何处理它以使其适用于任何 k 元素数组。
非常感谢任何提示或建议!
更新:我尝试创建一个递归移动索引并尝试添加的方法。它有效,但我认为它不是很有效:/
public static int[] nextCombi(int[] arr, int index, int maxVal){
if (index < 0 || maxVal < 0){
return arr;
}
else{
if (arr[index] + 1 == maxVal){
if (index - 1 >= 0){
nextCombi(arr, index - 1, maxVal - 1);
arr[index] = arr[index - 1] + 1;
}
else{
arr[index]++;
return arr;
}
}
else{
// Can add
arr[index]++;
}
}
return arr;
}
主要
while (true){
arr = nextCombi(arr, max, n);
if (arr[0] > max)
break;
}
【问题讨论】:
-
到目前为止你有什么代码?你能让它适用于固定长度的数组吗? IE。长度=3?
-
我需要动态的,因此很头疼 ;-;