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

让人做网站需要注意什么条件绍兴建设公司网站

让人做网站需要注意什么条件,绍兴建设公司网站,wordpress主题汉化版免费下载,临沂网站建设哪家更好78. 子集 - 力扣(LeetCode) 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nu…

78. 子集 - 力扣(LeetCode)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

方法:DFS回溯法(深度优先搜索)

思路

使用DFS回溯法遍历所有可能的子集组合:

​路径记录​​:使用列表path记录当前已选择的元素

​结果集​​:使用列表ret保存所有找到的子集

​递归设计​​:

  • 每层递归处理一个元素(当前索引n对应的元素)
  • 分别考虑选与不选当前元素的两种情况
  • 递归结束时将路径添加到结果集
关键点解释

​终止条件​​:当处理完所有元素(n == 数组长度),保存当前路径

​选择与回溯​​:

  • 选择当前元素 → 递归处理下一元素 → 回溯移除元素
  • 不选择当前元素 → 直接递归处理下一元素

​无副作用递归​​:使用n+1作为参数传递(而非n++/++n),避免状态污染

代码实现

class Solution {List<List<Integer>> ret; // 结果集List<Integer> path;       // 当前路径(子集)public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums, 0); // 从索引0开始DFSreturn ret;}private void dfs(int[] nums, int n) {// 终止条件:已处理所有元素if (nums.length == n) {ret.add(new ArrayList<>(path)); // 保存当前子集return;}// 情况1:选择当前元素path.add(nums[n]);dfs(nums, n + 1);  // 处理下一索引path.remove(path.size() - 1); // 回溯// 情况2:不选择当前元素dfs(nums, n + 1);  // 直接处理下一索引}
}

执行流程示例(nums=[1,2])
递归层当前元素选择情况path状态操作说明
01[1]递归进入下一层
12[1,2]到达终点→保存[1,2]
12不选[1]到达终点→保存[1]
01不选[]递归进入下一层
12[2]到达终点→保存[2]
12不选[]到达终点→保存空集
复杂度分析
  • ​时间复杂度​​:O(N×2^N)
    • 共生成2^N个子集
    • 每个子集平均长度O(N),复制到结果集需O(N)
  • ​空间复杂度​​:O(N)
    • 递归调用栈深度最大为N
    • 路径列表path长度最多为N

高效DFS解法(循环回溯)

算法思路

这种DFS实现采用循环遍历代替选择分支,核心思想是:

  1. ​以不同起始点展开搜索​​:每次递归从pos位置开始遍历数组
  2. ​路径即子集​​:每次进入递归就将当前路径作为子集加入结果集
  3. ​逐步扩展子集​​:从当前位置开始向后扩展,避免重复元素
代码实现 
class Solution {List<List<Integer>> ret; // 结果集List<Integer> path;       // 当前路径(子集)public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums, 0); // 从索引0开始DFSreturn ret;}private void dfs(int[] nums, int pos) {ret.add(new ArrayList<>(path)); // 保存当前路径作为子集// 从pos开始向后扩展子集for (int i = pos; i < nums.length; i++) {path.add(nums[i]);      // 包含当前元素dfs(nums, i + 1);       // 递归处理后续元素path.remove(path.size() - 1); // 回溯}}
}

 

执行流程示例(nums=[1,2])
递归层级起始位置当前遍历操作path状态结果集变化
10i=0添加1,dfs(i+1=1)[1]加入空集[]
21循环开始首先保存路径[1]加入[1]
21i=1添加2,dfs(i+1=2)[1,2]加入[1,2]
32-保存路径后循环不执行[1,2]加入[1,2]
32-回溯到上一层[1]
21循环结束回溯到上一层[]
10i=1添加2,dfs(i+1=2)[2]加入[2]
22-保存路径后循环不执行[2]加入[2]

最终结果集:[[],[1],[1,2],[2]]

复杂度分析
  • ​时间复杂度​​:O(N×2^N)
    • 生成2^N个子集
    • 每个子集复制操作需O(N)
  • ​空间复杂度​​:O(N)
    • 递归栈深度最大N
    • 路径存储最多N个元素

 解法一的决策树

解法二的决策树

http://www.dtcms.com/a/573704.html

相关文章:

  • OCSSA-VMD-Transformer-LSTM-Adaboost轴承故障诊断MATLAB代码实现
  • 工业园区废水除重金属镍
  • 自动化深度研究智能体-deep research实战
  • 制作网站培训学校网站建设优化服务方案模板
  • 计算机操作系统:文件保护
  • 卸载——通用方法
  • 【Java】异常
  • 底层视觉及图像增强-项目实践-细节再<十六-5,如何用AI实现LED显示画质增强:从经典到实战-再深挖>:从LED大屏,到手机小屏,快来挖一挖里面都有什么
  • 如果做一个网站网站开发采用的技术方案说明
  • 吉安市规划建设局网站重庆五号线金建站
  • BST平衡二叉树相关
  • Spring Boot3零基础教程,事态感知API doOnXXX,笔记111
  • 个人性质网站唐尧文化 网站建设工作总结
  • JDBC - 数据库连接池
  • R 包中的生命周期触发函数全解析
  • 华为WATCH D2 WATCH GT6:秋季来临,尊爱老人的智能守护
  • LangChain RAG 完整流程实战解析
  • 镇江建设质量监督站网站移动app网站模板
  • 【论文精读】SV3D:基于视频扩散模型的单图多视角合成与3D生成
  • 视频融合平台EasyCVR级联失败问题排查:请求上级播放后,视频为何无法打开?
  • 哪个网站能下载gif品牌红酒的网站建设
  • 登录失败次数限制
  • wordpress文章图片目录网站改版的seo注意事项
  • 【git】git clone含有lfs大文件时卡在resolving deltas(100%)的解决方案
  • 外贸和网站制作个人网站有什么内容
  • 开发一个完整的Electron应用程序
  • 从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
  • App 怎么上架 iOS?从准备资料到开心上架(Appuploader)免 Mac 上传的完整实战流程指南
  • 智能安全管理 基于视觉分析的玩手机检测系统 手机行为AI模型训练 边缘计算手机行为监测设备
  • 做网站的必备软件php安防企业网站源码