【 每天学习一点算法 2026/03/18】全排列

每天学习一点算法 2026/03/18

题目:全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

这道题跟之前的电话号码的字母组合很像,可以看成 n 叉树,只是下一层子节点选择范围是上一层选择后剩余的数字。

typescript 复制代码
function permute(nums: number[]): number[][] {
  const resArr = []
  const len = nums.length
  function helper (nextNums: number[], res: number[]) {
    if (res.length === len) {
      // 重排数组等于长度等于原数组长度,这条路径的递归重排完成
      resArr.push(res)
      return
    }
    for (let i = 0; i < nextNums.length; i++) {
      // 循环选择当前节点
      const cuurent = [...res] // 不修改每一层的重排结果
      cuurent.push(nextNums[i]) // 选择节点
      // 获取剩余数组,不修改这一层的剩余数组(toSpliced可以直接实现去掉某些元素,但是力扣这个运行环境不支持)
      const next = nextNums.filter(item => item !== nextNums[i])
      // 递归到下一层
      helper(next, cuurent)
    }
  }
  // 初始传入原数组和重排数组容器
  helper(nums, [])
  return resArr
}

题目来源:力扣(LeetCode)

相关推荐
Share_Shun2 小时前
【定位引导】多点对位算法
算法
Book思议-2 小时前
【数据结构实战】判断链表是否有环:快慢指针法(Floyd 判圈算法)
c语言·数据结构·算法·链表
liuyao_xianhui2 小时前
优选算法_位运算_只出现一次的数字3_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
lihao lihao2 小时前
滑动窗口
数据结构·算法
Jordannnnnnnn2 小时前
复试打卡day30
算法
郝学胜-神的一滴2 小时前
贪心策略实战Leetcode 860题:柠檬水找零问题的优雅解法
数据结构·c++·算法·leetcode·职场和发展
小资同学2 小时前
考研机试贪心算法(二)
考研·算法·贪心算法
小资同学2 小时前
考研机试之递归与贪心算法
算法·华为·贪心算法
我能坚持多久2 小时前
链式二叉树OJ问题详解
算法