用递归的算法,求ABCD自由组合后有几种组合结果,各位哥哥,姐姐有想法吗?

解决方案 »

  1.   

    int 排列方法(string)
    {
       if(null == string || 0 == string.length()) return 0;
       while(string的长度>1)
       {
          return 排列方法(string.substring(1)) *2;
       }
       //length = 1
       return 1;
    }
      

  2.   

    不好意思,我没说明白,是组合方式的结果比如 ABCD 四个的组合方式打印出来,ACBD,ABDC,DBAC...用递归打印出来.
      

  3.   

    请看看这个是不是 你要的
    结果是:0--ABCD .  1--ABDC .  2--ACBD .  3--ACDB .  4--ADBC .  5--ADCB .  6--BACD .  7--BADC .  8--BCAD .  9--BCDA .  10--BDAC .  11--BDCA .  12--CABD .  13--CADB .  14--CBAD .  15--CBDA .  16--CDAB .  17--CDBA .  18--DABC .  19--DACB .  20--DBAC .  21--DBCA .  22--DCAB .  23--DCBA .  
    代码是:import java.util.*;public class TestABCD {
        
        Vector all=new Vector();  
        String strA = null;
        String strB = null;
        String results = null;
        String passThen=null;
       
        public void getABCD(String wawa,String passBefore) {
          
            for (int i = 0; i < wawa.length(); i++) {            strA = wawa.charAt(i) + "";//第一i个字母
                strB = wawa.replaceFirst(strA, "");//去掉后剩下的字母
                passThen=passBefore+strA;//将要向下一个节点传的字符串
                
                if (wawa.length()>2) {
                    getABCD(strB,passThen);
                }else if(wawa.length()==2){
                    results=passThen+strB;//得到结果
                    all.add(results);//放入集合
                }
            }
        }
        public void see(){//查看结果
            for(int i=0;i<all.size();i++){
                String result=(String)all.elementAt(i);
                System.out.println("  "+result+"   ----------"+i);
            }
        }
        
        public static void main(String[] args) {
            TestABCD t = new TestABCD();
            t.getABCD("ABCD","");
            t.see();//查看结果
        }
    }