任务是找到数字{1,2,3 ... N}的排列。 N <= 16。 问题在于条件:每个数字必须只使用一次,排列应该是N尺寸。并且每个排列应该是数组,因为它将被测试。
输入给出一个排列。 主要任务是找到所有排列,它们与第一个排列具有相同的差异。 例如,给出
12 3 6 1 9 11 8 5 2 4 7 10
差异为-9,3,-5,8,2,-3,-3,-3,2,3,10
因此,有12种排列,具有相同的排列差异。
3 11 8 5 2 4 6 9 12 7 10 1
3 6 9 11 8 5 2 4 12 7 10 1
4 12 7 10 1 3 6 9 11 8 5 2
4 7 10 12 3 6 1 9 11 8 5 2
4 6 9 12 7 10 1 3 11 8 5 2
6 9 12 7 10 1 3 11 8 5 2 4
9 11 8 5 2 10 12 3 6 1 4 7
11 8 5 2 10 12 3 6 1 4 7 9
11 8 5 2 4 12 7 10 1 3 6 9
11 8 5 2 4 7 10 12 3 6 1 9
12 3 6 1 9 11 8 5 2 4 7 10
12 3 6 1 4 7 9 11 8 5 2 10
我已经编写了每个排列的检查,但现在我无法正确找到所有排列(没有重复的数字)来检查它们。
这是
in
- N的排列,de
- 差异的排列
boolean Check(int[] in, int[] de){
for(int i=0; i<de.length;i++){
if(in[0]+de[i]==in[1]){
int[] in2=new int[in.length-1];
if(in2.length==1){
return true; }
for(int j=1; j<in.length;j++){
in2[j-1]=in[j];
}
int[] de2=new int[de.length-1];
for(int j=0; j<de.length;j++){
if(de[j]!=de[i]){
de2[j]=de[j];}}
Check(in2,de2);
return false;
}
return false;
}
return false;
}