字符串组合

例如:我输入123,则输出123、132、213、231、312、321
(1)
import java.util.ArrayList;
import java.util.Arrays;
public class Permutation {  
    public static void main(String[] args) {  
        String[] strs=permutation("12345");
        System.out.println("全部排列的个数为:"+strs.length+"个");
        System.out.println("全部排列的元素是:");
        System.out.println(Arrays.toString(strs));
    }  
 
    public  static String[] permutation(String str) {  
        ArrayList<String> myList = new ArrayList<String>();  
        char[] strChars=str.toCharArray();  
        char temp;  
        long times=1;  
        int pos=strChars.length-2;  
        int increment=-1;  
        for(int i=1;i<strChars.length+1;i++){  
            times*=i;  
        }  
        for(int i=1;i<times;i++){  
            temp=strChars[pos];  
            strChars[pos]=strChars[pos+1];  
            strChars[pos+1]=temp;  
            myList.add(new String(strChars));  
            pos+=increment;  
            if(pos==-1){  
                increment=1;  
                pos=0;  
                temp=strChars[strChars.length-2];  
                strChars[strChars.length-2]=strChars[strChars.length-1];  
                strChars[strChars.length-1]=temp;  
                myList.add(new String(strChars));  
                i++;  
            }else if(pos==strChars.length-1){  
                increment=-1;  
                pos=strChars.length-2;  
                temp=strChars[0];  
                strChars[0]=strChars[1];  
                strChars[1]=temp;  
                myList.add(new String(strChars));  
                i++;  
            }  
        }  
        return myList.toArray(new String[0]);  
    }  
 
}

(2)
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class MyTest {

   
    public static void main(String[] args) {
        MyTest mt = new MyTest();
       
        mt.init("123");
        mt.productStr();
        mt.printTarStrings();

    }
    //字串源
    private String srcString;
    //结果集
    private List<String> tarStrings;
   
    //初始化成员变量
    public void init(String srcString)
    {
        this.srcString = srcString;
        this.tarStrings = new LinkedList<String>();
    }
   
    //清理
    public void clear()
    {
        this.srcString = null;
        this.tarStrings = null;
    }
   
    //拷贝StringBuffer
    private StringBuffer copySB(StringBuffer sb)
    {
        return new StringBuffer(sb);
    }
   
    //产生结果字符串
    public void productStr()
    {
        StringBuffer srcSB = new StringBuffer(srcString);
        StringBuffer childSB = new StringBuffer();
        productStr(srcSB,childSB);
    }
   
    //核心算法
    private void productStr(StringBuffer srcSB,StringBuffer childSB)
    {
        if(0 == srcSB.length())
        {
            this.tarStrings.add(childSB.toString());
        }
        else
        {
            for(int i=0;i<srcSB.length();i++)
            {
                StringBuffer newSrcSB = copySB(srcSB);
                StringBuffer newChildSB = copySB(childSB);
               
                newChildSB.append(newSrcSB.charAt(i));
                newSrcSB.deleteCharAt(i);
               
                productStr(newSrcSB,newChildSB);
               
            }
        }
    }
   
    //获得结果
    public List<String> getTarStrings() {
        return tarStrings;
    }
   
    //打印结果
    public void printTarStrings()
    {
        for(Iterator it = this.tarStrings.iterator();it.hasNext();)
        {
            System.out.println(it.next());
        }
    }

}

你可能感兴趣的:(算法)