在 java 中移动数组

Moving array in java

所以我有一个连续开始的k个元素的数组,例如 0 1 2

我试图让它上升到某个值,比如 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;
}

我认为你应该从列表的末尾开始,升级到没有达到最大值,然后从列表的第一项开始。

这是一个例子:

List<Integer> ints = new ArrayList<>(); // create the list
ints.addAll(Arrays.asList(0, 1, 3)); // add element in it:
int max = 4; // indicate max value
int maxOfLast = Integer.MAX_VALUE; // start with max value to be sure of not reached max
for(int currentIndex = ints.size() - 1; currentIndex >= 0; currentIndex--) {
    int current = 0;
    while((current = ints.get(currentIndex)) < max && (current + 1) < maxOfLast) { // until it's not the end or reach max of index + 1 value
        ints.set(currentIndex, ++current); // upgrade it
        System.out.println(ints); // print (see output)
    }
    maxOfLast = ints.get(currentIndex); // set current value as max for next interation
}

输出:

[0, 1, 4]
[0, 2, 4]
[0, 3, 4]
[1, 3, 4]
[2, 3, 4]