跳至主要內容

无重复字符串的排列组合

Mr.He小于 1 分钟算法排列组合回溯

无重复字符串的排列组合

编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

示例

 输入:S = "qwe"
 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
/**
 * @param {string} S
 * @return {string[]}
 */
var permutation = function(S) {
  const arr = [...S]
  const length = arr.length
  const result = []
  function travel(str, strArr = arr, deep = 0){
    if(deep === length){
      result.push(str)
      return
    }
    // 每次将一个字符取出,留下剩余字符数组,并记录深度
    strArr.forEach((item, index, array) => {
      travel(str + item, array.filter((a) => a !== item), deep+1)
    })
  }
  travel('')
  return result
};

感觉deep这个概念好像不好理解,换个思路来实现上面的代码

var permutation = function(S) {
  const arr = [...S]
  const result = []
  // 参数是:用掉的字符,剩余字符组成的数组
  function travel(str, strArr){
    if(str.length === S.length){
      result.push(str)
      return
    }
    // 每次将一个字符取出,留下剩余字符数组
    strArr.forEach((item, index, array) => {
      travel(str + item, array.filter((a) => a !== item))
    })
  }
  travel('', arr)
  return result
};