全排列
全排列代码
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); } } }