题目:输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。
例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。
整体思路:
1、把已有的字符串一个个分解成数组形式
2、预设一个函数,es6中的用数组索引交换元素
3、进行深度遍历及回溯
function Permutation(str)
{
// write code here
let arr = str.split('')
let res = []
//两元素交换,此时的ab为下标索引
function reverse(a,b){
[arr[a],arr[b]] = [arr[b],arr[a]]
}
function dfs(a,b){
//划定循环边界,当dfs到最后一个索引时,则把这个字符串放入结果数组
if(a===b) {
res.push(arr.join(''));
return
}
//进行循环
for(let i = a; i<=b; i++){
//本身和本身交换一次,再深度遍历,如果已经到底,则回退
reverse(a,i)
dfs(a+1,b)
//再换回来,再进行全排列的第二种
reverse(a,i)
}
}
//函数调用
dfs(0,arr.length-1)
//new Set(arr)数组去重,Array.from()是拷贝的意思,Set生成数组
res = Array.from(new Set(res))
return res
}
module.exports = {
Permutation : Permutation
};