例如,如果我有一个数组a = {1,2,6,10},它应该打印这4个数字的所有组合,应该有4个!总组合。一个由5个整数组成的数组总共有5个!组合。 (与以前的版本不同,因为我的参数数量必须保持不变。我不允许放入3个以上的参数。
数组a = {1,2,6,10}
{1,2,10,6}
{1,6,2,10}
{1,6,10,2}
{10,6,2,1}
我正在尝试使用Recursion来解决这个过程,任何想法如何?这是我现在的代码。任何有任何想法的人都可以帮助我吗?
static void permutations (int a[], int n, int p){
if (p==n-1)
return ;
for (int i=p; i<n; i++){
int b[]=new int [n];
b[p]=a[i];
for (int j=0; j<i; j++)
b[j]=a[j];
for (int k =i+1; k<n; k++)
b[k]=a[k];
System.out.println(Arrays.toString(b));
return permutations(b, n, p+1);
}
}
答案 0 :(得分:0)
解决问题的最佳方法是在代数中使用Permutations概念,它是获取集合的所有可能组合的非常有用的方法。
你应该知道解决这个问题的可能性:
此集{1, 2, 6, 10}
元素1
中的具有 k-Permutations ,即3
这个排列是:{2, 1, 6, 10},{6, 2, 1, 10},{10, 2, 6, 1}
。
元素2
还有 k-Permutations ,即2
2
排列为:{1, 6, 2, 10},{1, 10, 6, 2}
。
元素6
有一个 k-Permutations ,即1
6
排列为:{1, 2, 10, 6}
。
最后是集合中所有元素的总可能排列:3 * 2 * 1 = 6
。
打印所有可能的排列的简单算法:
int[] num = {1,2,6,10};
int[] a = num.clone();
ArrayList<String> combs = new ArrayList<String>();
int temp;
for(int i=0; i < num.length-1; i++){
for(int j=i+1; j < num.length; j++){
temp = a[i];
a[i] = a[j];
a[j] = temp;
String obj = Arrays.toString(a);
if(!combs.contains(obj)){
combs.add(obj);
}
a = num.clone();
}
}
System.out.println("All possible order Combinations:");
for(String obj : combs){
System.out.println(obj);
}
<强>输出:强>
All possible order Combinations:
[2, 1, 6, 10]
[6, 2, 1, 10]
[10, 2, 6, 1]
[1, 6, 2, 10]
[1, 10, 6, 2]
[1, 2, 10, 6]
希望这会有所帮助。