字符串组合

例如:我输入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());
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值