先丢代码,后续补充说明:
public class MainTest {
private static int num = 0;
public static void main(String[] args) {
int[] ints = new int[]{1,2,3};
int[] result = new int[ints.length];
System.out.println("方案1:");
pl2(ints,result,0);
num=0;
System.out.println("\n方案2:");
pl(ints,0);
}
public static void pl2(int[] ints,int[] result,int start){
int[] data = result.clone();
if (ints.length == start){
num++;
System.out.println(num + " : " + Arrays.toString(result));
}else {
for (int i = 0 ;i < ints.length; i ++ ){
boolean flag = true;
for (int dd :data){
if (ints[i] == dd){
flag =false;
break;
}
}
Arrays.asList(result).contains(ints[i]); //为何不能这么判断
if (flag){
data[start] = ints[i];
pl2(ints,data,start+1);
}
}
}
}
public static void pl (int[] ints , int start){
if (ints.length == start){
num++;
System.out.println(num + " : "+ Arrays.toString(ints));
}else {
for (int i = start ; i < ints.length;i++){
swap(ints,i,start);
pl(ints,start+1);
swap(ints,start,i);
}
}
}
private static void swap(int[] ints, int i, int start) {
int mid = ints[i];
ints[i] = ints[start];
ints[start] = mid;
}
}
- 有关ArrayList.asList().contains()参见【Java踩坑记】——Arrays.asList().contains()