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