比如输入字符串"1234", 输出所有的不重复的24个组合:1234,1243,1324,1342,
输入字符串"123", 输出所有的不重复的9个组合:123,132,213,提示:
第一步:求出给定字符串的所有不重复组合数,比如"1234"的组合是24个,"123"是9个,"1233"是9个,
第二步:用到Hashtable和collections.shuffle()如果不用上面的提示用其它的方法也行

解决方案 »

  1.   

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Scanner;public class Ruader {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String sin = in.nextLine().replaceAll("[^0-9]", "");
    while (sin.equals(""))
    sin = in.nextLine().replaceAll("[^0-9]", "");
    ArrayList<Character> ch = new ArrayList<Character>();
    int setSize = 1;
    for (int i = 0; i < sin.length(); i++) {
    ch.add(sin.charAt(i));
    setSize *= i + 1;
    }
    HashSet<String> set = new HashSet<String>();
    while (set.size() < setSize) {
    StringBuilder sb = new StringBuilder();
    for (Character t : ch)
    sb.append(t);
    set.add(sb.toString());
    Collections.shuffle(ch);
    }
    for (String t : set) 
    System.out.println(t);
    }
    }
      

  2.   

    import java.util.*;public class ZuHeGeShu {
    public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);String string = scanner.nextLine();
    char[] chars = string.toCharArray();Set<Character> array = new HashSet<Character>();
    for(int i=0;i<chars.length;i++){
    array.add(chars[i]);
    }
    int total = array.size();
    int sum = 1;
    for(int i=1;i<=total;i++){
    sum *= i;
    }
    System.out.println("SUM: " + sum);
    }
    }
    我要分。。要分。。
      

  3.   

    你这个是排列,不是组合
    public static ArrayList<String> getPP(String str) {
    ArrayList<String> al1 = new ArrayList<String>(); 
    if (str.length() == 1) {
    al1.add(str);
    } else {
     for (int j = 0;j<str.length();j++) { 
    ArrayList<String> al2 = getPP(str.replace(str.substring(j,j+1),""));
    for (int i = 0;i<al2.size();i++) { 
    al1.add(str.substring(j,j+1) + al2.get(i)); }
    }
    }return al1;
    }
      

  4.   

    排列个数算法:
    n!= n*(n-1)*(n-2)*....*2*1
      

  5.   

    import java.util.*;/*
            输入任意一个数字,输出该数字各个位数上
            数字的所有排列组合,要求不能有重复的组合
     */
    class Display {
        private ArrayList obj = new ArrayList();
        private void display(StringBuffer temp, int length, char deleChar) {        for (int i = 0; i < length; i++) {
                StringBuffer tempdis = new StringBuffer(temp);
                String element = tempdis.insert(i, deleChar).toString();
               // System.out.print(element+"  ");
                boolean flag = false;
                for (int j = 0; j < obj.size(); j++) {
                    if (obj.get(j).equals(element)) {
                        flag = true;
                        break;
                    }         
                }if (flag == false) {
                    obj.add(element);
                }
                
            }
        }
        private void displayElement(){
            accept();
            for(int i=0;i<obj.size();i++){
                System.out.print(obj.get(i)+"  ");
            }
        }    public void accept() {
            Scanner in = new Scanner(System.in);
            String num = in.nextLine();
            int length = num.length();
            for (int i = 0; i < length; i++) {
                StringBuffer temp = new StringBuffer(num);
                char deleChar = temp.charAt(i);
                temp.deleteCharAt(i);
                display(temp, length, deleChar);
            }
        }    public static void main(String[] args) {
            Display dis = new Display();
            dis.displayElement();
        }
    }