用Java实现全排列的输出

前几天去笔试的题目,没做出来。

有1,2,2,3,4,5几个数字(6个)。用Java实现他们的全排列输出。

要求:4不在第3位,3和5不挨着。

求助。

private Set set =new HashSet();
//1,2,2,3,4,5 全排列

//4不在第3位,3和5不挨着
public static void main(String[] args) {
// int tt[]={1,2,2,3,4,5};
// 选择排列的位置
//System.out.println(new ConnectionSort().prefix("abcwerwrwqrewqr","abfsdfwer"));
String a="122345";
new ConnectionSort().fullArray(a,"",0);
}
public void fullArray(String a,String para,int k)
{

String result="";
int l=a.length();

    StringBuilder  build=new StringBuilder();
    build.append(para);
    result=build.toString();

    char ch=a.charAt(k);
    String temp=result; 
    for(int i=0;i<=k;i++){  
             result=insertStr(temp,i,ch);   
             if(k < l-1)
                fullArray(a,result,k+1); 
             if(k+1 == l) //判断组装字符串完成
             { 
                int tem=set.size();
                set.add(result);
                char  t1=result.charAt(3);
                if(t1=='4')
                {
                    continue;
                }
                if("35".equals(result.split("35")) || "53".equals(result.split("53")))
                {
                    continue;
                }
                if(set.size()>tem)
                {
                    continue;
                }
                System.out.println(result);
             }
    }
}
/**
 * 插入字符,在第key个位置添加字符
 * @param str
 * @return
 */
public  String  insertStr(String str,int key,char ch){

    StringBuilder  builder=new StringBuilder();
     int l=str.length();
     if(key==l)  // 在最后一个位置添加字符ch
     {
         builder.append(str);
         builder.append(ch);
     }else{
         builder.append(str.substring(0, key));
         builder.append(ch);
         builder.append(str.substring(key));
     }
     return  builder.toString();
} 

可以先输出数组的全排列 再删除4不在第3位和3和5不相邻的。