题目

题目来源:力扣(LeetCode)

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例:

输入:s = “abc”
输出:[“abc”,”acb”,”bac”,”bca”,”cab”,”cba”]

  1. /**
  2. * @param {string} s
  3. * @return {string[]}
  4. */
  5. var permutation = function (s) {
  6. let set = new Set()//set集合去重
  7. if (s.length == 1) return [s];
  8. for (let i = 0; i < s.length; i++) {
  9. let char = s[i]
  10. let ss = s.slice(0, i) + s.slice(i + 1, s.length)//拼接其余字符
  11. let l = permutation(ss)//递归找到其余元素的所有排列方式
  12. for (let j = 0; j < l.length; j++) {
  13. set.add(char + l[j])//将遍历的字符char拼接到剩余字符全排列的头部并存储到集合中
  14. }
  15. }
  16. return [...set]//集合转化为数组
  17. };