我正在处理我必须显示数组长度的可能排列的任务。我尝试了一些技巧,但它仍然给出了许多输出的列表,最后我的项目崩溃了。
我已经尝试过数学,我得到了答案“39916800。
例如:对于输入数组[3,2,1,4,6],总共有5个!= 120 可能。
问题是:
鉴于 int [] a = [3, 10, 4, 6, 1, 8, 5, 9, 0, 11, 7, 2]。你需要多久与自己置换一次a,直到你再次得到a(这就是所谓的a的度数)?
示例:[0,2,1] 的次数为 2,因为 permute ([0,2,1], [0,2,1]) = [0,1,2] 和 permute ([0,1, 2],[0,2,1]) = [0,2,1]。
答案应该是 8 位数字。
这是我的代码:
public class Permute{
static void permute(java.util.List<Integer> arr, int k){
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println(java.util.Arrays.toString(arr.toArray()));
}
}
public static void main(String[] args){
Permute.permute(java.util.Arrays.asList(3,4,6,2,1), 0);
}
}