用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列

解决方案 »

  1.   

    楼主怎么不在论坛里查一下以前的帖子啊,已经有N多人问过同样的问题了!再贴一遍,这个可以处理有重复元素的数组(如果只处理无重复的数据只需要调用rank()函数就可以了):import java.util.Set;
    import java.util.HashSet;public class Test { /**
     * @param args
     */ public static void main(String[] args) {
    int[] a = { 1, 2, 2, 3, 4, 5 };
    String str = toOrderString(a); /*将数组的下标值加1组成一个无重复的新数组,如本例为{1, 2, 2, 3, 4, 5} */
    Set<String> tempSet = rank(str, "", str.length(), new HashSet<String>()); /* 对下标值加1所组成的数组进行完全排列组合,若只需取部分组合,则将str.length()改为介于0和str.length()之间的任一整数就可以了 */
    Set<String> resultSet = getResult(tempSet, a); /* 将排列组合好的各组下标序列值在数组中取相应的元素值 */
    System.out.println("There are " + resultSet.size() + " ways to rank the array.");
    for (String string : resultSet) {
    System.out.println(string);
    }
    } /* 用递归方法对数组的各元素下标值加1进行长度为length的完全排列组合 */
    public static Set<String> rank(String s, String temp, int length, Set<String> set) {
    if (temp.length() == length) {
    set.add(temp);
    } else {
    for (int i = 0; i < s.length(); i++) {
    if (temp.indexOf(s.charAt(i)) < 0)
    set = rank(s, temp + s.charAt(i), length, set);
    }
    }
    return set;
    } public static String toOrderString(int[] a) {
    String str = new String("");
    for (int i = 0; i < a.length; i++) {
    str += (i + 1);
    }
    return str;
    } /* 将排列组合好的各组下标序列值在数组中取相应的元素值 */
    public static Set<String> getResult(Set<String> set, int[] a) {
    Set<String> tempSet = new HashSet<String>();
    String tempStr = new String("");
    for (String str : set) {
    for (int i = 0; i < str.length(); i++) {
    tempStr += a[Integer.parseInt(str.substring(i, i + 1)) - 1];
    }
    tempSet.add(tempStr);
    tempStr = "";
    }
    return tempSet;
    } public static String toString(int[] a) {
    String str = new String("");
    for (int i = 0; i < a.length; i++) {
    str += a[i];
    }
    return str;
    }}输出结果:
    There are 360 ways to rank the array.
    312254
    321524
    254312
    325412
    435221
    212543
    125234
    531242
    124253
    ……
    ……
      

  2.   


    import java.util.*;
    public class OYL {
    public static String[] test(String str){
    if(str.length()==1){
    String[] temp=new String[1];
    temp[0]=str;
    return temp;
    }
    if(str.length()==2){
    String[] temp=new String[2];
    temp[0]=str;
    temp[1]=str.substring(1, 2)+str.substring(0, 1);
    return temp;
    }
    Set<String> result=new HashSet();
    for(int i=0;i<str.length();i++){
    String[] temp=test(get(str,i));
    for(int j=0;j<temp.length;j++){
    result.add(str.substring(i,i+1)+temp[j]);
    }
    }
    String[] answer=new String[result.size()];
    Iterator<String> it=result.iterator();
    int h=0;
    while(it.hasNext()){
    answer[h]=it.next();
    h++;
    }
    return answer;
    }
    public static String get(String str,int i){
    if(i==0)
    return str.substring(1,str.length());
    if(i==str.length()-1)
    return str.substring(0,str.length()-1);
    return str.substring(0, i)+str.substring(i+1,str.length());
    }
    public static void main(String[] args){
    String str=new String("122345");
    String[] result=test(str);
    for(int i=0;i<result.length;i++){
    System.out.println(result[i]);
    }

    }
    }this is mine!