算法题:100分,给出任意长度数字字符串,求所有不重复的组合
比如输入字符串 "1234 ",   输出所有的不重复的24个组合:1234,1243,1324,1342。。。。。。, 
 输入字符串 "123 ",   输出所有的不重复的9个组合:123,132,213,。。。。。。   
 提示: 
 第一步:求出给定字符串的所有不重复组合数,比如 "1234 "的组合是24个, "123 "是9个, "1233 "是9个, 
 第二步:用到Hashtable和collections.shuffle()   
 如果不用上面的提示用其它的方法也行 
------解决方案--------------------123 有几个组合??? 
 123,132,213,231,312,321 请问还有什么可能?   
 先算出这个字符串中不重复的字符共i个。结果等于i!排列组合吧?
------解决方案--------------------估计楼主是搞错了,123确实只有6个   
 LZ小学没学好吧,6和9搞混了:)
------解决方案--------------------是不是这个?   
 public class test{ 
   String[] list; 
   StringBuffer sb = new StringBuffer(); 
   int len,start,x; 
   test(String in){ 
     len = Integer.parseInt(in); 
     list = new String[len]; 
     for(int i=0;i <len;i++) 
       list[i] = String.valueOf(i+1); 
     printList(); 
     System.out.print(sb); 
   } 
   void replaceStr(int c1,int c2){ 
     String temp = list[c1]; 
     list[c1] = list[c2]; 
     list[c2] = temp; 
   } 
   void printList(){ 
     if(start==len-1){ 
       if(x++> 10000000){ 
         x=0; 
         System.out.print(sb); 
         sb = new StringBuffer(); 
       } 
       for(int i=0;i <len;i++,x++) 
         sb.append(list[i]); 
       sb.append( "  "); 
     }else{ 
       for(int i=start;i <len;i++){ 
         replaceStr(start++,i); 
         printList(); 
         replaceStr(i,--start); 
       } 
     } 
   } 
   public static void main(String args[]){ 
     new test(args[0]); 
   } 
 }
------解决方案--------------------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); 
 } 
 }