0

给定一个数字 N 和一个数组 ? 如何在数组中分配 N,如下例所示:

N = 5 和大小为 4 的数组;

[5,0,0,0]
[0,5,0,0]
[0,0,5,0]
[0,0,0,5]
[4,1,0,0]
[4,0,1,0]
[4,0,0,1]
[1,4,0,0]
[0,4,1,0]
[0,4,0,1]
[1,0,4,0]
[0,1,4,0]
[0,0,4,1]
.
..
..
[2,1,2,0]
..
..
...

等等

重要的是整个数组的总和是N!

我想实现一个爬山算法,所以我想生成所有后继者,然后爬山可以从列表中选择。

4

1 回答 1

0

如果您讨厌递归或有长数组,请使用或不使用递归。你要填写arr。您已经填充了开头(0..index-1),并且您想用其余的 N 填充数组的末尾。

调用 (arr 长度为 5): fill(arr, 5, 0);

private static void fill(int[] arr, int N, int index) {
    if (arr == null) {
        return;
    }
    if (N == 0) {
        for (; index < arr.length; index++) {
            arr[index] = 0;
        }
    } else if (index == arr.length - 1) {
        arr[index] = N;
    } else {
        for (int j = N; j >= 0; j--) {
            arr[index] = j;
            fill(arr, N - j, index + 1);
        }
    }

    if (index >= arr.length - 1) {
        // use your array
        System.out.println(Arrays.toString(arr));
    }
}
于 2013-04-13T21:04:29.493 回答