给定数字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!
我想实现一个爬山算法,所以我想生成所有后继者,然后爬山可以从列表中选择。
答案 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));
}
}