在java中的数组中分配一个数字

时间:2013-04-13 19:59:56

标签: java

给定数字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!

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

1 个答案:

答案 0 :(得分: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));
    }
}