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

相关推荐
冻柠檬飞冰走茶18 分钟前
PTA基础编程题目集 7-17 爬动的蠕虫(C语言实现)
c语言·开发语言·数据结构·算法
南清的coding日记30 分钟前
7.29 Agent八股学习+小程序学习
学习
kdxiaojie38 分钟前
Linux 驱动研究 —— V4L2 (14)
linux·运维·笔记·学习
会编程的土豆1 小时前
LeetCode 热题 HOT100(一):哈希表与双指针入门(Go 实现)
算法·leetcode·职场和发展
学习中.........1 小时前
并行 BPE 训练 与 手写 `Tokenizer`
人工智能·算法·机器学习·语言模型
承渊政道1 小时前
Linux系统学习【掌握Ext系列⽂件系统的相关内容】
linux·运维·学习·文件系统·存储结构·inode
未知违规用户1 小时前
大模型项目: 学习FastAPI 服务器开发
服务器·人工智能·python·学习·fastapi
科学实验家1 小时前
动态规划2
算法·动态规划
幸福在路上wellbeing1 小时前
AI 智能体开发 · Day 3 详细学习手册
人工智能·学习·oracle
编程圈子3 小时前
操作系统学习19:缺页异常 #PF 与按需分页
学习