[路飞]_前端算法第九十六弹-字符串的排列

99 阅读1分钟

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

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

示例:

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

这是一道全排列的题,我们需要递归遍历其所有的 可能。

var permutation = function (s) {
  let len = s.length
	// 终止条件
  if (len === 0) return ['']
  if (len === 1) return [s]
	// 简历新数组
  let res = []
  for (let i = 0; i < len; i++) {
		// 拿到当前的字符串
    const char = s[i]
		// 取出当前字符串之后剩下的字符串
    let newStr = s.slice(0, i) + s.slice(i + 1)
		// 再进行全排列
    const next = permutation(newStr)
		// 拿到每次全排列后的字符串,进行拼接
    next.forEach(item => {
      res.push(char + item)
    })
  }
  return [...new Set(res)]
};