我只会C++,给你C++的吧做个参考
void swap(int a,int b);这个你自己肯定会写
void perm(char *list,int i,int n)
{
  int j;
  if(i==n)
     {
        for(j=0;j<n;j++)
             cout<<list[j];//list就是那个数字字符串
        cout<<endl;
      }
  else
    for(j=i;j<=n;j++)
      {
       swap(list[i],list[j]);
        perm(list,i+1,n);
       swap(list[i],list[j]);
      }
}
调用是perm(串地址,0,len(串));

解决方案 »

  1.   

    先说个思路。首先把一串字符串变成一个字符数组char[],然后把字符数组的值一个个放到HashSet中,这样可以过滤掉重复的字符。然后用Set的size()方法得到剩余数组长度n,n!即为组合个数。
      

  2.   

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Collections;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Enumeration;public class TestString{
    public static void main(String[] args){
    Hashtable ht = new Hashtable(); 
    int num1 = 0;
    int num2 = 0;
    int num3 = 1;
    int num4 = 0;
    String str = "12345";

    num2 = str.length();

    for(;num2>0;num2--){
    num3 *= num2;
    }
    System.out.println(num3);
    char[] ch = new char[str.length()];
    str.getChars(0,str.length(),ch,0);
    List list = new ArrayList();
    for(int num=0;num<ch.length;num++){
    list.add(new String(ch[num]+""));
    }


    while(num4<num3){
    Collections.shuffle(list);
    Iterator it = list.iterator();
    StringBuffer sb = new StringBuffer("");
    while(it.hasNext()){
    sb.append(it.next());
    }
    ht.put(sb.toString(),"");
    num4 = ht.size();
    }

    Enumeration e = ht.keys();
    int num5 = 1;
    while(e.hasMoreElements()){
    System.out.println(num5+" "+e.nextElement());
    num5++;
    }
    }
    }
      

  3.   

    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);
    }
    }
      

  4.   

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Collections;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Enumeration;
    import java.util.HashSet;public class TestString{
    public static void main(String[] args){
    Hashtable ht = new Hashtable(); 
    int num1 = 0;
    int num2 = 0;
    int num3 = 1;
    int num4 = 0;
    int num5 = 0;
    String str = "11221";

    //存放 0 - 9 各个出现的个数
    int n[] = new int[10];

    num2 = str.length();

    //可能出现字符串的所有个数
    for(;num2>0;num2--){
    num3 *= num2;
    }

    System.out.println(num3);
    char[] ch = new char[str.length()];
    str.getChars(0,str.length(),ch,0);
    List list = new ArrayList();
    for(int num=0;num<ch.length;num++){
    list.add(new String(ch[num]+""));
    }

    //求出 0 - 9 各个出现的个数
    for(int num=0;num<list.size();num++){
    int index = Integer.parseInt(list.get(num).toString());
    n[index]++;
    }


    num5 = jieCheng(n);

    //num3为没有重复数字的字符串个数
    num3 = num3/num5;

    System.out.println(num3);


    while(num4<num3){
    Collections.shuffle(list);
    Iterator it = list.iterator();
    StringBuffer sb = new StringBuffer("");
    while(it.hasNext()){
    sb.append(it.next());
    }
    ht.put(sb.toString(),"");
    num4 = ht.size();
    }

    Enumeration e = ht.keys();
    int num6 = 1;
    while(e.hasMoreElements()){
    System.out.println(num6+" "+e.nextElement());
    num6++;
    }
    }

    //数祖中每个值的阶乘,再乘机
    public static int jieCheng(int n[]){
    int sum=1;
    for(int num=0;num<n.length;num++){
    for(;n[num]>0;n[num]--){
    sum *= n[num];
    }
    }
    return sum;
    }
    }修改后的
      

  5.   

    递归的
    import java.util.*;public class StringTest{

    public static void main(String[] args){
    String str = "1233";
    char[] ch = new char[str.length()];
    str.getChars(0,str.length(),ch,0);
    List list = new ArrayList();
    for(int num=0;num<ch.length;num++){
    list.add(new String(ch[num]+""));
    }
    StringTest st = new StringTest();
    String[] obj = new String[str.length()];
    Set set = new HashSet();
    st.getAll(obj,list,set);
    Iterator it = set.iterator();

    while(it.hasNext()){
    System.out.println(it.next());
    }
    System.out.println("总共有 "+set.size());
    }

    public void getAll(String[] obj,List list,Set set){

    if(list.isEmpty()){
    String sb = "";
    for(int num=0;num<obj.length;num++){

    sb += obj[num];
    }
    //System.out.println(sb.toString());
    set.add(sb);
    return;
    }
    for(int num=0;num<list.size();num++){
    //sb.append(list.get(num));
    obj[list.size()-1] = (String)list.get(num);
    List l = new ArrayList(list);
    l.remove(list.get(num));
    this.getAll(obj,l,set);
    }
    }
    }