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

相关推荐
晓晓hh11 分钟前
JavaSE学习——set集合和Map映射
学习
Q741_14721 分钟前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
The_Ticker22 分钟前
印度股票实时行情API(低成本方案)
python·websocket·算法·金融·区块链
夏乌_Wx26 分钟前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
لا معنى له1 小时前
Var-JEPA:联合嵌入预测架构的变分形式 —— 连接预测式与生成式自监督学习 ----论文翻译
人工智能·笔记·学习·语言模型
世人万千丶1 小时前
Flutter 框架跨平台鸿蒙开发 - 宠物语言翻译器应用
学习·flutter·华为·开源·harmonyos·鸿蒙
AI成长日志1 小时前
【笔面试算法学习专栏】哈希表基础:两数之和与字母异位词分组
学习·算法·面试
"菠萝"1 小时前
C#知识学习-021(文字关键字)
开发语言·学习·c#
chase。1 小时前
【学习笔记】让机器人“边想边动”——实时动作分块流策略的执行方法
笔记·学习·机器人
abant21 小时前
leetcode 239 单调队列 需要一些记忆
算法·leetcode·职场和发展