当前位置: 首页 > java >正文

算法-js-子集

题:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

方法一:迭代法
核心逻辑:动态扩展子集, 小规模数据(n ≤ 20)推荐

const subsets = (nums) => {const result = [[]];for (const num of nums) {const n = result.length;for (let i = 0; i < n; i++) {result.push([...result[i], num]);}}return result;
};

方法二:回溯法(DFS+剪枝)
核心逻辑:通过深度优先搜索遍历所有决策路径

const subsets = (nums) => {const result = [];const backtrack = (start, path) => {result.push([...path]); // 记录当前路径for (let i = start; i < nums.length; i++) {path.push(nums[i]);    // 选择当前元素backtrack(i + 1, path); // 递归下一层path.pop();           // 撤销选择(回溯)}};backtrack(0, []);return result;
};

方法三:递归分治法
核心逻辑:基于数学归纳法递推生成子集

const subsets = (nums) => {if (nums.length === 0) return [[]];const last = nums.pop();const prevSubsets = subsets(nums); // 递归获取前n-1元素的子集const newSubsets = prevSubsets.map(sub => [...sub, last]); return [...prevSubsets, ...newSubsets]; // 合并新旧子集
};

时间复杂度均为O(n*2^n)

场景选择建议
竞速场景:优先选择迭代法(代码最简)
复杂变体:使用回溯法(方便添加剪枝条件,如子集大小限制)
理论研究:递归法(便于数学证明)

http://www.xdnf.cn/news/9680.html

相关文章:

  • 【论文精读】2024 CVPR--Upscale-A-Video现实世界视频超分辨率(RealWorld VSR)
  • 【计算机常识】--环境变量
  • 双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开
  • k8s上运行的mysql、mariadb数据库的备份记录
  • 低代码——表单生成器Form Generator详解(二)——从JSON配置项到动态渲染表单渲染
  • vscode调试stm32,Cortex Debug的配置文件lanuch.json如何写,日志
  • 《P2324 [SCOI2005] 骑士精神》
  • uniapp开发企业微信小程序时 wx.qy.login 在uniapp中使用的时候,需要导包吗?
  • TCP连接关闭过程的技术解析:从四次挥手到资源释放
  • 变频器从入门到精通
  • 【达梦数据库】临时表空间不足
  • MySQL 查询语句的执行顺序
  • 【Rust模式与匹配】Rust模式与匹配深入探索与应用实战
  • 变更数据捕获(CDC)与流处理引擎实现医疗数据实时同步(下)
  • 【C语言】函数指针及其应用
  • Python基础 | jupyter工具的安装与基本使用
  • AI 眼镜新纪元:贴片式TF卡与 SOC 芯片的黄金组合破局智能穿戴
  • 油猴脚本开发基础
  • 苹果公司计划按年份来重命名重大的软件,将升级iOS 18软件至iOS 26
  • Apache Kafka 实现原理深度解析:生产、存储与消费全流程
  • 如何将 WSL 的 Ubuntu-24.04 迁移到其他电脑
  • 【C语言极简自学笔记】项目开发——扫雷游戏
  • 【AI论文】论文转海报:迈向从科学论文到多模态海报的自动化生成
  • 【计算机网络】第2章:应用层—应用层协议原理
  • 记录一个难崩的bug
  • leetcode701.二叉搜索树中的插入操作:迭代法利用有序性寻找空节点插入点
  • 【评测】DuReader-Retrieval数据集之初体验
  • C++并集查找
  • 关于scrapy在pycharm中run可以运行,但是debug不行的问题
  • 联想小新pro 14 重新安装系统提示acpi-bios-error错误的解决方法