用Java实现全排列的输出

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

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

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

求助。

2个回答

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不相邻的。

wkshippou
wkshippou [1,2,3,4,5] 12345 21345 31245 41235 51234 12354 23145 32145 42135 52134 12435 23415 32415 42315 52314 12453 23451 32451 42351 52341 12534 21354 31425 41325 51324 12543 23154 34125 43125 53124 13245 23514 34215 43215 53214 13425 23541 34251 43251 53241 13452 21435 31452 41352 51342 13254 24135 34152 43152 53142 13524 24315 34512 43512 53412 13542 24351 34521 43521 53421 14235 21453 31254 41253 51243 14325 24153 32154 42153 52143 14352 24513 32514 42513 52413 14253 24531 32541 42531 52431 14523 21534 31524 41523 51423 14532 25134 35124 45123 54123 15234 25314 35214 45213 54213 15324 25341 35241 45231 54231 15342 21543 31542 41532 51432 15243 25143 35142 45132 54132 15423 25413 35412 45312 54312 15432 25431 35421 45321 54321
7 年多之前 回复
somefuture
进击的愤怒 怎么进行全排列?
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问