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

社区网站开发进度表自己做的网站怎么让别人看见

社区网站开发进度表,自己做的网站怎么让别人看见,多少钱可以注册公司,三合一网站制作公司目录 问题描述 解决思路 关键点 代码实现 代码解析 1. 初始化结果和路径 2. 深度优先搜索#xff08;DFS#xff09; 3. 遍历候选数字 4. 递归与回溯 示例分析 复杂度与优化 回溯算法三部曲 1. 路径选择#xff1a;记录当前路径 2. 递归探索#xff1a;进入下…目录 问题描述 解决思路 关键点 代码实现 代码解析 1. 初始化结果和路径 2. 深度优先搜索DFS 3. 遍历候选数字 4. 递归与回溯 示例分析 复杂度与优化 回溯算法三部曲 1. 路径选择记录当前路径 2. 递归探索进入下一层决策 3. 撤销选择回溯到上一层 代码框架模板 关键点解析 总结 问题描述 我们需要找出所有由 k 个不同数字组成的组合这些数字的范围是 1 到 9且它们的和等于 n。组合中的数字不能重复使用且结果不能包含重复的组合。例如当 k3, n7 时唯一有效的组合是 [1,2,4]。 解决思路 这个问题可以通过回溯算法解决。核心思想是递归地尝试每一个可能的数字逐步构建符合条件的组合并通过剪枝优化减少无效搜索。 关键点 数字范围固定所有数字只能在 1-9 中选择。 组合唯一性每个组合中的数字必须严格递增避免重复如 [1,2,4] 和 [2,1,4] 被视为同一组合。 剪枝优化在递归过程中提前终止不可能满足条件的分支大幅提高效率。 代码实现 var combinationSum3 function (k, n) {const result [];const path [];const dfs (start, sum) {// 终止条件路径长度等于k且和等于nif (path.length k sum n) {result.push([...path]);return;}// 遍历候选数字for (let i start; i 9; i) {// 剪枝1剩余数字不够组成k个数if (path.length (9 - i 1) k) break; // 剪枝2当前和超过nif (sum i n) break; path.push(i);dfs(i 1, sum i); // 递归下一层起始位置为i1path.pop(); // 回溯撤销选择}};dfs(1, 0); // 从数字1开始初始和为0return result; }; 代码解析 1. 初始化结果和路径 result存储所有符合条件的组合。 path记录当前递归路径中的数字。 2. 深度优先搜索DFS 参数start 表示当前递归的起始数字sum 表示路径中数字的当前和。 终止条件当路径长度等于 k 且和等于 n 时将当前路径加入结果列表。 3. 遍历候选数字 循环范围从 start 到 9确保数字递增避免重复组合。 剪枝1path.length (9 - i 1) k 如果当前已选数字数量加上剩余可用数字数量不足 k说明无法组成有效组合直接终止循环。 例如k3当前已选1个数字剩余可用数字是 8 和 9共2个显然不够选2个。 剪枝2sum i n 如果当前路径和加上 i 已经超过 n后续更大的数字只会让和更大无需继续搜索。 4. 递归与回溯 选择数字将 i 加入路径递归调用 dfs 处理下一个数字。 撤销选择递归返回后将 i 从路径中移除尝试其他可能的数字。 示例分析 以 k3, n7 为例 初始调用dfs(1, 0)。 第一层循环i1路径为 [1]和为1。 第二层循环i2起始为2路径为 [1,2]和为3。 第三层循环i4起始为3路径为 [1,2,4]和为7满足条件加入结果。 回溯递归返回尝试其他数字但均无法满足条件最终结果唯一。 复杂度与优化 时间复杂度最坏情况为 O(9! / (k!(9-k)!))即组合数的时间。 空间复杂度递归栈深度为 k空间复杂度为 O(k)。 通过剪枝实际运行时间远低于理论最坏情况因为无效分支被提前终止。 回溯算法三部曲 回溯算法是解决组合、排列、子集等问题的经典方法。它的核心思想是递归地尝试所有可能的选择并通过“撤销选择”回到之前的状态从而穷举所有解。其实现过程可以总结为以下三个关键步骤 1. 路径选择记录当前路径 在每一步递归中将当前的选择加入路径通常是一个数组表示“当前正在尝试这个选择”。 对应代码path.push(i) 作用保存当前递归层的选择用于后续判断是否满足条件。 示例在组合问题中选择数字 i 加入 path表示尝试将 i 作为组合的一部分。 2. 递归探索进入下一层决策 基于当前路径递归调用函数处理下一个选择比如下一个数字或位置。 对应代码dfs(i 1, sum i) 作用进入下一层递归继续尝试剩余的选择。 示例在组合问题中递归时从 i1 开始确保数字不重复且递增避免重复组合。 3. 撤销选择回溯到上一层 当递归返回后即完成当前分支的探索将最后加入路径的元素移除回到上一层状态尝试其他可能的选择。 对应代码path.pop() 作用撤销当前层的选择保证路径的正确性避免污染其他分支。 示例组合问题中当尝试完以 i 开头的所有组合后移除 i尝试下一个数字。 代码框架模板 function backtrack(路径, 选择列表) {if (满足终止条件) {将路径加入结果;return;}for (选择 in 选择列表) {做选择将选择加入路径;backtrack(路径, 新的选择列表); // 进入下一层递归撤销选择将选择从路径移除; // 回溯} } 关键点解析 路径的维护 path 数组记录当前递归路径的选择必须通过 push 和 pop 确保状态正确。 递归与回溯的关系 递归是纵向深入探索一条路径回溯是横向尝试其他可能的选择。递归的终点是终止条件回溯的触发点是递归返回后的 pop。 剪枝优化 在组合问题中通过以下两种剪枝大幅减少递归次数 剩余数字不足path.length (9 - i 1) k 例如如果还需要选 2 个数字但剩余可用数字只有 1 个直接终止。 和超过目标值sum i n 当前路径和已经超过 n无需继续递归 总结 该问题通过回溯算法枚举所有可能的组合结合剪枝策略剩余数字不足、和超过目标值显著提高效率。核心在于 递增选择数字避免重复组合。 剪枝优化减少不必要的递归调用。 回溯机制撤销选择以尝试其他可能。 这种模式适用于许多组合问题如子集、排列、组合总和等。
http://www.zqtcl.cn/news/101033/

相关文章:

  • 建网站一般最低多少钱地方门户模板
  • 网站开发虚拟主机管理系统星巴克网络营销方式
  • phpnow 搭建网站网站建设一般怎么付款
  • 网站开发三剑客湖州市南浔区建设局网站
  • 江西专业的企业网站建设公司长沙做网站找哪家好
  • 国外互联网资讯网站南宁专业网站建设公司
  • 苏州新区做网站公司pc网站建设费用
  • 做影视网站需要多少钱2003网站建设
  • 河南智能网站建设哪家好重庆在建工程项目
  • 爱站网站长工具网站查看空间商
  • 网站营销活动页面制作wordpress 只显示一个主题
  • 电子网站建设怎么做秦皇岛网站制作公司
  • 网站建站模板样例平台推广怎么做
  • 网站建设首选亿企联盟做网站宣传有用吗
  • 网站建设公司行业苏州高端网站建设咨询
  • 电商平台网站开发过程江苏省建设科技发展中心网站简介
  • 空间租用 网站开发重庆手机网站推广资料
  • 新余 网站建设网站建设行业新闻
  • 做301网站打不开网上智慧团建网站
  • 四川省住房与城乡建设厅官方网站免费域名解析ip
  • 芜湖网站建设价格这么做网站原型图
  • 做传奇网站怎么弄的南京微网站开发
  • 网站建设基础教程人教版网站域名选择的原则
  • u盘做网站网站建设公司公司介绍
  • 嘉兴网站排名优化报windows wordpress 轻量级
  • html5网站开发方案海珠网站建设公
  • 津做网站建筑网课平台
  • 佛山制作手机网站汕头网站定制
  • 网站域名解释怎么做济南集团网站建设
  • 网站怎么做咨询网站开发商