package com.hello;
import java.util.HashSet;
import java.util.Set;
/*
* @author 张春蕾
* 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
* 本题目的解决时我自己的思路,不知道最总结果是否正确,若不正确请谅解
* 不使用循环递归,忘了是哪个公司的笔试题了
*/
public class HelloJava{
public static void main(String[] args){
int[] a = {1,2,2,3,4,5};
Set<String> set = getSet(a);
for(String s: set){//循环遍历取出每个字符串进行判断
if(s.indexOf('4') != 2){//4不能在第三位
if(s.indexOf("35")==-1 && s.indexOf("53")==-1){//3和5不能相邻
System.out.println(s);
}
}
}
}
private static Set<String> getSet(int[] a) {
Set<String> set = new HashSet<String>();
String s = null;
for(int i=0;i<a.length;i++){//循环遍历一次,取出每一个数做第一个数
for(int j=0;j<a.length;j++){//在取下一个数做第二个数
s = getSortString(a,i,j);
set.add(s);//使用set容器可以自动对重复的数据进行过滤
}
}
return set;
}
public static String getSortString(int[]a,int i,int j){
String strFinal = "";
if(i == j){//判断是否相等,若想等,则直接输出
for(int k=0;k<a.length;k++){
strFinal = strFinal + a[k];
}
}else{//若不想等,则进行交换
int[] n = a;
n[i]=n[i]^n[j];
n[j]=n[i]^n[j];
n[i]=n[i]^n[j];
for(int k=0;k<a.length;k++){
strFinal = strFinal +a[k];
}
}
return strFinal;//返回最终字符串
}
}
输出结果为:
345122
122345
125234
145223
451322
451232
512423
245123
312245
212345
345212
152234
512234
341252
541223
513422