【发布时间】:2015-08-03 21:57:31
【问题描述】:
我正在开发一个程序,并且我有一个函数可以交换用户输入的长度数组中的位置。但是,我想弄清楚如何打印出这个函数调用 N!次,这将列出函数中的所有排列。
我的置换函数代码是:
static void nextPerm(int[] A){
for( int i = (n-1); i > 0; i-- ){
if( A[i] < A[i+1] ){
A[i] = pivot;
continue;
}
if( A[i] >= A[i+1] ){
reverseArray(A);
return;
}
}
for( int i = n; i > 0; i--){
if( A[i] > pivot ){
A[i] = successor;
continue;
}
}
Swap(pivot, successor);
int[] B = new int[pivot+1];
reverseArray(B);
return;
}
我是否应该在函数 main 中编写一个循环,将其打印出来 n!次?
【问题讨论】:
-
示例输入:输入数组长度:5
-
输出:(1, 3, 5, 2, 4) (1, 4, 2, 5, 3) (2, 4, 1, 3, 5) (2, 5, 3, 1, 4) (3, 1, 4, 2, 5) (3, 5, 2, 4, 1) (4, 1, 3, 5, 2) (4, 2, 5, 3, 1) (5 , 2, 4, 1, 3) (5, 3, 1, 4, 2)
-
这就是这段代码的隐藏含义:
int[] B = new int[pivot+1]; reverseArray(B);?这反转了归零的数组,不是吗???reverseArray(A)- 这看起来也很奇怪......我建议你改用 my answer 的实现,我测试它很好,它按预期工作。
标签: java arrays algorithm permutation factorial