字符串全排列-js

题目描述

image

思路分析

对于全排列类型的题我们都可以按照之前的思路去做,(全排列)。采用回溯的方法。这里的字符串我们也可以借助之前的函数,将字符串转为数组即可

代码参考

const permute = (str) => {
  // 所有的结果
  const nums = str.split('')
  const res = []
  // 一次的数据,这里需要的返回形式是['ab','ba']的类型,因此每一次的遍历结果可用字符串保存
  let path = ''
  // 该位置的数字之前是否访问过,默认为0表示未访问过
  let use = new Array(nums.length).fill(0)
  // 遍历的深度
  let depth = 0
  const dfs = () => {
    // 递归退出条件,如果深度等于数组长度,则说明已经遍历到树的叶子节点
    if (depth === nums.length) {
      res.push(path)
      return
    }
    // 遍历数组
    for (let i = 0; i < nums.length; i++) {
      // 判断当前元素是否使用过,如果用过则跳出
      if (use[i]) {
        continue
      }
      // 字符串拼接
      path += nums[i]
      // 深度++
      depth++
      // 标志当前数据已使用过
      use[i] =
        // 递归调用
        dfs()
      // 开始回溯
      use[i] = 0
      depth--
      // 字符串删除最后一个
      path = path.substring(0, path.length - 1)
    }
  }
  dfs()
  return res
}
posted @ 2023-01-18 19:45  含若飞  阅读(100)  评论(0编辑  收藏  举报