我们可以先看一下上面的思路
对于更长的串我们在中间插入时会有更多的选择,因此,我们在代码中要使用一个for循环来实现。具体代码如下:
import java.util.ArrayList;
import java.util.List;
//生成一个字符串的全排列
public class 全排列1 {
public static void main(String[] args) {
String a = "abcd";
System.out.println(fullArrangement(a).size());
for (String s :
fullArrangement(a)) {
System.out.println(s);
}
}
private static List<String> fullArrangement(String s) {
List<String> list = new ArrayList<>();//生成一个List集合来存储全排列的结果
list.add("" + s.charAt(0));//初始化list数组,初始元素为字符串的第一个元素
for (int i = 1; i < s.length(); i++) {
List<String> new_list = new ArrayList<>();//创建一个临时数组来存储下一步生成的结果
char c = s.charAt(i);//获取此时应该插入的字符
//对当前的数组进行遍历操作
for (String str :
list) {
new_list.add(str + c);//新字符插入到字符串的后面
new_list.add(c + str);//新字符插入到字符串前面
//字符插入字符串中间的操作用循环完成
for (int j = 1; j < str.length(); j++) {//新字符插入到字符串中间
String tem = str.substring(0, j) + c + str.substring(j);
new_list.add(tem);
}
}
list = new_list;//将生成的新的newlist集合同步
}
return list;
}
}