全排列 3 种方法整理(递归,多路递归,前缀)
关于全排列的问题描述就不再赘述了,这里整理出 3 种求一个集合中所有元素的全排列的方法。
一、递归 n-1 层
处理 n-1 层(n == 1 时返回),对 n-1 层的所有元素进行 “补左”,“补右”,“补中间”三个操作,得到 n 层。
注意 “补中间” 操作可能涉及多个位置。
参考代码:
// 递归
void getPermutation(string arr, int n){
// 出口 当n == 1时,只有一个元素
if(n == 1){
// 使用字符数组辅助
char ch[1];
ch[0] = arr[0];
string temp(ch, 1);
pre.insert(temp);
return;
}
// 处理好n-1层
getPermutation(arr, n