【 每天学习一点算法 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)

相关推荐
LuminousCPP1 分钟前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法
smartpi_ai2 分钟前
自学习“放着不动“会自动退出吗?超时退出缺席的交互兜底、退出条件挂串口的状态联动设计
学习·microsoft·交互
苦猿的大模型日记4 分钟前
Day58|从0学习 Claude Code(八):对话越聊越长,我给它装了个自动碎纸机
学习
山甫aa7 分钟前
【从零开始的 Web 后端学习】令牌技术一篇搞定(JWT 登录认证保姆级)
后端·学习·spring·web·jwt
hansang_IR11 分钟前
【题解】P9753 [CSP-S 2023] 消消乐
数据结构·c++·算法
shehuiyuelaiyuehao25 分钟前
算法40,模拟运算,替换所有的问号
数据结构·算法·leetcode
用户2049375549533 分钟前
从“能识别”到“稳定识别”:离线ASR在真实会议场景中的问题与工程优化实践
算法
留白_40 分钟前
【tableau入门学习】6、盒须图、靶心图、四象限图、甘特图、直方图
学习·甘特图
MSTcheng.1 小时前
【Linux学习】Linux学习第四弹——Linux基本指令3
linux·windows·学习·操作系统·指令
lihaihui19911 小时前
STM32 学习
学习