全排列代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FullSort {
private static void sort(List<String> datas, List<String> target, int size) {
if (target.size() == size) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List<String> newDatas = new ArrayList<String>(datas);
List<String> newTarget = new ArrayList<String>(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget, size);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "a", "b" };
int size = datas.length;
sort(Arrays.asList(datas), new ArrayList<String>(), size);
}
}
代码2
改进 调用串的函数,将字符的操作变为字符串的操作,原理一样
import java.util.ArrayList;
import java.util.List;
public class NumTest {
public static void main(String[] args) {
String s="ABCD";//原字符串
List<String> result = list(s, "");//列出字符的组合,放入result
System.out.println(result.size());;
System.out.println(result);
}
/**
* 列出基础字符串(base)的所有组合
* @param base 以该字符串作为基础字符串,进行选择性组合。
* @param buff 所求字符串的临时结果
* @param result 存放所求结果
*/
public static List<String> list(String base,String buff){
List<String> result = new ArrayList<String>();//存放结果信息。
if(base.length()<=0){
result.add(buff);
}
for(int i=0;i<base.length();i++){
List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
result.addAll(temp);
}
return result;
}
}
代码2的另一种写法
import java.util.ArrayList;
import java.util.List;
public class NumTest {
public static void main(String[] args) {
String s="ABCD";//原字符串
List<String> result = new ArrayList<String>();//存放结果信息。
list(s, "", result);//列出字符的组合,放入result
System.out.println(result.size());;
System.out.println(result);
}
/**
* 列出基础字符串(base)的所有组合
* @param base 以该字符串作为基础字符串,进行选择性组合。
* @param buff 所求字符串的临时结果
* @param result 存放所求结果
*/
public static void list(String base,String buff,List<String> result){
if(base.length()<=0){
result.add(buff);
}
for(int i=0;i<base.length();i++){
list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i),result);
}
}
}