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

如何做好网站需求分析phicomm怎么做网站

如何做好网站需求分析,phicomm怎么做网站,网站建设系统开发需要多少钱,建德市建设局网站文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…

文章目录

  • 一、题目介绍
  • 二、递归思路详解:从决策树开始理解
  • 三、解法一:二叉决策树 DFS
  • 四、解法二:组合式回溯写法(推荐)
  • 五、解法对比

递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的问题,比如树的遍历、组合问题、回溯搜索等。

今天,我们以 LeetCode 第 78 题「子集(Subsets)」为例,带大家深入理解递归的思路、实现细节以及不同写法的差异。

一、题目介绍

题目链接: 78. 子集 - LeetCode

题目描述:
给定一个整数数组 nums,返回该数组所有可能的子集(幂集)。

示例:

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

二、递归思路详解:从决策树开始理解

我们用递归的方式去“做决策”——对每个元素,都面临两个选择:

  • 选择它
  • 不选择它

这种决策结构,其实就像是一棵二叉树:
每一个节点都有两个分支,一个是“我选了当前元素”,另一个是“我跳过当前元素”。

举例说明

nums = [1, 2] 为例,整个决策过程如下所示:

                []/    \[1]     []/   \      \[1,2]   [1]     [2]

每一条路径就是一个子集的构建过程:

  • []:什么都不选
  • [1]:只选第一个
  • [1,2]:全选
  • [2]:只选第二个

最终收集所有路径,就是所有的子集

用语言描述递归过程

  • 从位置 0 开始:
    • nums[0],进入下一层递归
    • nums[1],递归到尽头,保存 [1,2]
    • 不选 nums[1],保存 [1]
  • 不选 nums[0]
    • nums[1],保存 [2]
    • 不选 nums[1],保存 []

这样,我们就得到了所有子集。

三、解法一:二叉决策树 DFS

解法思路
每次递归考虑一个元素,选或不选。
当走到数组末尾时,当前构建的路径就是一个合法的子集。

class Solution 
{vector<vector<int>> ret;  // 存放结果集vector<int> path;         // 当前构建的子集路径
public:vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0);         // 从索引 0 开始递归return ret;}void dfs(vector<int>& nums, int pos){if (pos == nums.size()) // 递归出口:遍历完所有元素{ret.push_back(path); // 加入当前路径return;}// 选择当前元素path.push_back(nums[pos]);dfs(nums, pos + 1);path.pop_back(); // 回溯,撤销选择// 不选择当前元素dfs(nums, pos + 1);}
};

四、解法二:组合式回溯写法(推荐)

思路核心
我们从当前下标 pos 开始向后遍历,每次选一个元素加入 path,递归处理后续子集,不再考虑当前之前的元素,避免重复。

这种方式更像是“组合问题”的模板写法。

决策过程

  • 每进入递归一次,就把当前 path 加入结果集
  • 然后,从当前位置 pos 开始遍历,尝试将每个元素加入 path,并递归后续
  • 回溯:递归返回后,需要把最后加入的元素移除,恢复现场

举例说明

                           []┌───────────────┼────────────────┐[1]              [2]             [3]/     \          /     \             \[1,2]   [1,3]     [2,3]                  [3]|        |         |[1,2,3]  [1,3]     [2,3]

用语言描述过程
pos = 0 开始:

  1. 先将空集 [] 加入结果集。
  2. 遍历索引 0~2:
    • 选择 nums[0]=1,路径变为 [1]
      • 继续从 pos=1 开始遍历:
        • 2 -> [1,2]
          • 3 -> [1,2,3]
        • 回溯到 [1]
        • 3 -> [1,3]
    • 回溯回到 []
    • 2 -> [2]
      • 3 -> [2,3]
    • 回溯回到 []
      • 3 -> [3]
        每一步都把当前的路径保存下来,形成最终的子集集合。

代码实现

class Solution 
{vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0); // 从第 0 个元素开始扩展return ret;}void dfs(vector<int>& nums, int pos){ret.push_back(path); // 每个路径都是一个合法子集for (int i = pos; i < nums.size(); i++){path.push_back(nums[i]);dfs(nums, i + 1);   // 继续递归下一个元素path.pop_back();    // 回溯,移除当前元素}}
};

优点分析

  • 不需要写递归出口,利用 for 循环自动控制终止条件
  • 结构上类似「组合问题」的回溯模板

为什么说它更像‘组合问题’?
因为组合问题也遵循一个核心原则:

  • 每次只能向后选元素,不能回头,以防止重复。

比如要从 [1,2,3] 中选出长度为 2 的组合,这种“向后递归 + 回溯”的结构是最自然的选择。

五、解法对比

比较维度解法一(选/不选)解法二(组合式回溯)
决策方式二分支:选 or 不选枚举所有起点及其后续路径
是否需要出口判断是(pos == nums.size()否,for 控制终止
可读性模拟决策树,结构清晰更接近组合枚举的写法
常见用途子集、排列、二叉树类问题子集、组合、N 皇后等问题

文章转载自:

http://DynUw86Y.dbphz.cn
http://OTBGDpuU.dbphz.cn
http://blkLwh8E.dbphz.cn
http://2NWrtOE5.dbphz.cn
http://zL1B3SXM.dbphz.cn
http://Ta0KzPyg.dbphz.cn
http://eCTSfB5o.dbphz.cn
http://WGYAFo4k.dbphz.cn
http://u1Zs8eFz.dbphz.cn
http://uDpWhM7E.dbphz.cn
http://FGdELpMp.dbphz.cn
http://d078S3Kh.dbphz.cn
http://KiEHOnKF.dbphz.cn
http://AsalPkEM.dbphz.cn
http://wpoxh7iz.dbphz.cn
http://nr2Quvqj.dbphz.cn
http://U2k6f4JD.dbphz.cn
http://AaLiaZ3B.dbphz.cn
http://Dj8dN9Pt.dbphz.cn
http://DDRCJQH4.dbphz.cn
http://PlT4xV5A.dbphz.cn
http://8mls8TLw.dbphz.cn
http://gM3N9L3r.dbphz.cn
http://WSb73j55.dbphz.cn
http://T7FH08px.dbphz.cn
http://cPStXLJ7.dbphz.cn
http://SgWSZeYY.dbphz.cn
http://AfRl8P7I.dbphz.cn
http://CuZ5IOh8.dbphz.cn
http://e3bO2P1C.dbphz.cn
http://www.dtcms.com/wzjs/750426.html

相关文章:

  • 宏润建设网站中航鑫源建设集团有限公司网站
  • 上海协策网站制作WordPress搬家emlog
  • wordpress零基础建站教程如何自己做官网首页
  • 做网站需要看那几点2019销售网站开发与设计现状
  • 全面的郑州网站建设网站建设是要考虑什么东西
  • 珠海网站优化培训wordpress模板开发教程
  • 网站属性设置分类信息建站系统
  • 佛山企业建网站科技魏玄成
  • x站源码免费分享学校网站建设介绍范文
  • 产品推广渠道有哪些方式深圳百度seo优化
  • 电影订票网站怎么做页游平台排行榜
  • 武进网站建设怎么样国内自动化网站建设
  • 上海专业网站营销做易经类的网站
  • 做电影网站有哪些建设银行手机个人网站
  • 品牌网站建设 细致磐石网络有没有做任务的网站
  • 建筑学生的网站wordpress创建页面地址设置
  • 天津市建设快速seo排名优化
  • 能进封禁网站的浏览器佛山本地网站建设
  • 国内装饰行业网站开发自己做的网站怎么推广
  • 建设部执业资格注册中心网站做泵阀生意到哪个网站
  • 网站公司推荐直播app开发公司排名
  • 做故障风的头像的网站wordpress主题设置框架
  • 怎么创造自己的网站建筑培训
  • 网站备案帐号网上做视频赚钱的网站
  • 手机做网站价格柳州市诚信体系建设网站
  • 如何网站建设平台网站开发有什么好的论坛
  • wordpress做网站优点网址大全名称
  • 如何查公司网站开发时间自建网站软件
  • 中国建设银行驻莫斯科网站网站 如何备案
  • 微山网站建设多少钱网站实名审核多久