在数学种排列和组合都是很重要的,在算法中也是,下面我们将介绍几种求全排列和求元素所有子集的方法。
一、全排列
全排列如果使用递归来实现的话是元素与元素交换的问题,而如果使用迭代实现的话是把当前字符加在已形成字符的前面或后面的问题。这里分别使用迭代,普通递归和多路递归+回溯实现。
迭代实现
//迭代实现,子问题:加在前面,加在后面,加在中间
static List<String> getPermutation(String s) {
List<String> res = new ArrayList<>();
res.add(s.charAt(0)+"");
for(int i=1;i<s.length();i++) {
List<String> res_new = new ArrayList<>();
char c = s.charAt(i);
for(String e:res) {
String str = c + e;
res_new.add(str);//加在前面
str = e + c;
res_new.add(str);//加在后面
for(int j=1;j<e.length();j++) {
str = e.substring(0,j)+c+e.substring(j);