Java题目:    用1,2,2,3,4,5这六个数字,写一个方法,打印出所有不同的排列,要求:4不能在第三位,3和5不能相连
    看看谁的方法最简单,最容易理解.最好有注释

解决方案 »

  1.   

    public static void perm(char[] buf,int start,int end){ 
            if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 
                for(int i=0;i<=end;i++){ 
                    System.out.print(buf[i]); 
                } 
                System.out.println();    
            } 
            else{//多个字母全排列 
                for(int i=start;i<=end;i++){ 
                    char temp=buf[start];//交换数组第一个元素与后续的元素 
                    buf[start]=buf[i]; 
                    buf[i]=temp; 
                    printArray(buf); 
                     
                    perm(buf,start+1,end);//后续元素递归全排列 
                     
                    temp=buf[start];//将交换后的数组还原 
                    buf[start]=buf[i]; 
                    buf[i]=temp; 
                    printArray(buf); 
                } 
            } 
        } 这个是递归实现的无任何限制的全排列  你只要在在第一个if判断中加上你的那两个条件就可以了  
      

  2.   

    最好用递归进行排列数组,然后用容器Set自动去除重复的序列。代码如下:import java.util.HashSet;
    import java.util.Set;public class Test { public static Set<String> set = new HashSet<String>(); // 用set存储所有符合条件的排列组合,可以看自动去除重复
     
    public static void range(char[] buf, int start, int end) {
    if (start == end) {
    String str = new String(buf); // 将当前字符数组转换为String
    if(buf[2] != '4' && str.indexOf("35") == -1 && str.indexOf("53") == -1){
    // 限制条件4不能在第三位,3和5不能相连
    set.add(str);
        } 
    }
    else {
    for (int i = start; i <= end; i++) {
    char temp = buf[start]; // 交换数组第一个元素与后续的元素
    buf[start] = buf[i];
    buf[i] = temp;
    range(buf, start + 1, end); // 后续元素递归全排列
    temp = buf[start]; // 将交换后的数组还原
    buf[start] = buf[i];
    buf[i] = temp;
    }
    }
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    char[] buf = { '1', '2', '2','3','4','5'};
    range(buf, 0, 5);
    for(String s:set){ // 用for打印出set中的所有记录
    System.out.println(s);
    }
    System.out.print("一共有 " + set.size() + " 各符合条件的组合");
    }}
    输出:……
    ……
    521432
    342512
    423152
    212345
    542231
    432152
    251423
    一共有 198 各符合条件的组合