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

相关推荐
Terra.K3 小时前
Java异常学习[特殊字符]
java·开发语言·学习
mCell3 小时前
Lua 编程入门:从基础语法到元表
javascript·算法·lua
wuyk5555 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无5 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
不会代码的小猴6 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
203号居民8 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真10 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
zjnlswd10 小时前
C#学习笔记4
笔记·学习·c#
minglie110 小时前
在linux环境烧录esp8266
学习