淮安集团网站建设购物网站每个模块主要功能

pingmian/2025/10/11 10:16:45/文章来源:
淮安集团网站建设,购物网站每个模块主要功能,建立个人网站怎么赚钱,网站开发后端选择目录 认识回溯思想回溯的代码框架从 N 叉树说起有的问题暴力搜索也不行回溯 递归 局部枚举 放下前任Go代码【LeetCode-77. 组合】回溯热身-再论二叉树的路径问题题目#xff1a;二叉树的所有路径Go 代码 题目#xff1a;路径总和 IIGo 代码 回溯是最重要的算法思想之一 递归 局部枚举 放下前任Go代码【LeetCode-77. 组合】回溯热身-再论二叉树的路径问题题目二叉树的所有路径Go 代码 题目路径总和 IIGo 代码 回溯是最重要的算法思想之一主要解决一些暴力枚举也搞不定的问题比如组合、分割、子集、排列、棋盘等。从性能角度来看回溯算法的效率并不高但对于这些暴力都搞不定的算法能出结果就很好了效率低点没关系。 认识回溯思想 回溯可以视为递归的拓展很多思想和解法都和递归密切相关。因此学习回溯时对于递归来分析其特征会理解更深刻。 关于递归和回溯的区别设想一个场景某猛男想脱单现在有两种策略 递归策略先于意中人制造偶遇然后了解人家的情况然后约吃饭有好感后尝试拉手没有拒绝就表白。回溯策略先统计周围所有的单身女孩然后一个一个表白被拒绝就说”我喝醉了“然后就当啥也没发生继续找下一个。 其实回溯本质就是这么个过程。 回溯最大的好处有非常明确的模版所有的回溯都是一个大框架因此透传理解回溯的框架是解决一切回溯问题的基础。那么就来分析这个框架。 回溯不是万能的而且能解决的问题也非常明确比如组合、分割、子集、排列、棋盘等不过这些问题具体处理时又有很多不同需要具体问题具体分析。 回溯可以理解为递归的拓展而代码结构又特别像 深度遍历 N 叉树因此只要知道递归理解回溯并不难。难在很多人不理解为什么在递归语言之后要有个”撤销“的操作。可以假设一个场景你谈了个新女朋友来你家之前你是否会将你前任的东西赶紧藏起来回溯也是一样有些信息是前任的要先处理掉才能重新开始。 回溯的代码框架 func Backtracking(参数) {if 终止条件 {存放结果return}for 选择本层集合中元素画成树就是树节点孩子的大小 {处理节点Backtracking()回溯撤销处理结果} }从 N 叉树说起 先看一下 N 叉树遍历的问题二叉树的前序遍历代码如下 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ func preorderTraversal(root *TreeNode) []int {ret : make([]int, 0)if root nil {return ret}ret append(ret, root.Val)ret append(ret, preorderTraversal(root.Left)...)ret append(ret, preorderTraversal(root.Right)...)return ret }假如现在是一个三叉、四叉甚至 N 叉树该怎么办呢很显然这时候就不能用 Left 和 Right 来表示分支了使用一个切片比较好就是这样 /*** Definition for a Node.* type Node struct {* Val int* Children []*Node* }*/func preorder(root *Node) []int {ret : make([]int, 0)if root nil {return ret}ret append(ret, root.Val)for _, v : range root.Children {ret append(ret, preorder(v)...)}return ret }到这里有没有发现和上面说的回溯的模版非常像了是的非常像既然很像那说明两者一定存在某种关系。继续往下看 有的问题暴力搜索也不行 我们说回溯主要解决暴力枚举也解决不了的问题。 看个例子题目链接LeetCode-77. 组合 对于示例1写成代码很容易双层循环轻松搞定 func combine(n int, k int) [][]int {ret : make([][]int, 0)for i:1; in; i {for j:i1;jn;j {arr : []int{i, j}ret append(ret, arr)}}return ret }假如 k 变大比如 k3 呢也可以三层循环基本搞定 func combine(n int, k int) [][]int {ret : make([][]int, 0)for i:1; in; i {for j:i1;jn;j {for u:j1;un;u {arr : []int{i, j, u}ret append(ret, arr)}}}return ret }如果这里的 k5 呢甚至 k50 呢你需要套多少层循环甚至告诉你 k 就是一个未知的正整数 k你怎么写循环呢这时候已经无能为力了所以暴力搜索就不行了。 这就是组合类型问题除此之外 子集、排列、切割、棋盘 等方面都有类似的问题。 回溯 递归 局部枚举 放下前任 继续研究 题目链接LeetCode-77. 组合 图示一下上面自己枚举所有答案的过程。 每次从集合中选取元素可选择的范围会逐步收缩到了取 4 时就直接为空了。 观察树结构可以发现每次访问到一次叶子节点图中绿色框就找到了一个结果。虽然最后一个是空的但是不影响结果。这相当于只需要把根节点开始每次选择的内容分支达到叶子节点时将其收集起来就是想要的结果。 元素个数 n 相当于树的宽度横向每个结果的元素个数 k 相当于树的深度纵向。所以我们说回溯算法就是一纵一横而已。再分析其他规律 每次选择都是从类似「1 2 3 4」「2 3 4」这样的序列中一个个选的这就是局部枚举而且越往后枚举范围越小。枚举时就是简单的暴力测试一个个验证能否满足要求从上图可以看到这就是 N 叉树遍历的过程因此两者代码必然很像。从图可见每个子树都是个可以递归的子结构。 这样我们就将回溯与 N 叉树完美结合在一起了。 但是还有一个大问题回溯一般会有个手动撤销的操作为什么呢继续观察上图 可以发现收集每个结果不是针对叶子节点而是针对树枝的比如最上层首先选了 1 下层如果选2结果就是「1 2」如果下层选了3结果就是「1 3」依此类推。现在问题是当得到第一个结果「1 2」之后怎么得到第二个结果「1 3」呢 可以发现可以在得到「1 2」之后将 2 撤销再继续取3这样就得到了「1 3」同理可以得到「1 4」之后当前层就没有了可以将 1 撤销继续从最上层取 2 继续进行。 对应的代码操作就是先将第一个结果放在临时列表 path 里得到第一个结果「1 2」之后就将 path 里的内容放进结果列表中之后将 path 里的 2 撤销继续寻找下一个结果「1 3」然后继续讲 path 放入结果然后再撤销继续找。 Go代码【LeetCode-77. 组合】 题目链接LeetCode-77. 组合 func combine(n int, k int) [][]int {ret : make([][]int, 0)if k 0 || n k {return ret}path : make([]int, 0)var dfs func(int)dfs func(start int) {if len(path) k {// 关键pathcopy : make([]int, k)copy(pathcopy, path)ret append(ret, pathcopy)return}for i:start;in;i {path append(path, i)dfs(i1)path path[:len(path)-1]}}dfs(1)return ret }回溯热身-再论二叉树的路径问题 题目二叉树的所有路径 题目链接LeetCode-257. 二叉树的所有路径 Go 代码 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ func binaryTreePaths(root *TreeNode) []string {ret : make([]string, 0)if root nil {return ret}path : make([]int, 0)var dfs func(*TreeNode)dfs func(node *TreeNode){if node nil {return}path append(path, node.Val)if node.Left nil node.Right nil {ret append(ret, conv(path))path path[:len(path)-1]return}dfs(node.Left)dfs(node.Right)path path[:len(path)-1]}dfs(root)return ret } func conv(arr []int) string {length : len(arr)strarr : make([]string, length)for i, v : range arr {strarr[i] strconv.Itoa(v)}return strings.Join(strarr,-) }对比之前递归方式的写法没有撤回步骤不是回溯写法 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ func binaryTreePaths(root *TreeNode) (res []string) {if root nil {return nil}var a func(*TreeNode, string)a func(node *TreeNode, path string) {if node nil {return}str : fmt.Sprintf(%d, node.Val)path pathstr// 叶子节点if node.Left nil node.Right nil {res append(res, path)return}a(node.Left, path-)a(node.Right, path-)}a(root, )return }题目路径总和 II 题目链接LeetCode-113. 路径总和 II Go 代码 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ func pathSum(root *TreeNode, targetSum int) [][]int {ret : make([][]int, 0)if root nil {return ret}path : make([]int, 0)var dfs func(*TreeNode, int)dfs func(node *TreeNode, sum int) {if node nil {return}path append(path, node.Val)// 叶子节点if node.Left nil node.Right nil {// 路径匹配加入结果列表if node.Val sum {pathcopy : make([]int, len(path))copy(pathcopy, path)ret append(ret, pathcopy)}path path[:len(path)-1]return}dfs(node.Left, sum-node.Val)dfs(node.Right, sum-node.Val)path path[:len(path)-1]}dfs(root, targetSum)return ret }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样打开网站制作盲盒小程序加盟

假如一堆数据&#xff0c;每一个数据都有一个标志位&#xff0c;按照标志位值的不同进行划分为不同的组&#xff0c;进行归类。 代码如下&#xff1a; void chunzhongForm::traverseList(winProList &dataList) {int nSize dataList.size();for(int i 0; i < nSize; …

文安做网站的做网站开发有什么专业证

一、背景 初学html&#xff0c;接触很多标签 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;当写出简单的小页面的时候&#xff0c;例如仅仅是一篇带有标题的文章&#xff0c;标题 <h1>标签单独一行&#xff0c;不管后面有多大的空间&…

关于网站建设需要的研究方法网站建设颜色代码表

引自《 JavaScript 权威指南》2.4 / P28 ~ 29 保留字 部分 保留字 JavaScript 把一些标识符拿出来用作自己的关键字。因此&#xff0c;就不能再在程序中把这些关键字用作标识符了&#xff1a; 保留字 Part1.txt123456breakdelete functionreturntypeofcasedoifswitchvarc…

新手织梦网建设网站广州网站建设联系信科海珠

介绍 本文将探讨生成对抗网络(GAN)及其时尚图像生成的卓越能力。GAN 彻底改变了生成建模领域,提供了一种通过对抗性学习创建新内容的创新方法。 在本指南中,我们将带您踏上一段迷人的旅程,从 GAN 的基本概念开始,逐步深入研究时尚图像生成的复杂性。通过实践项目和分步…

做微网站的第三方登录高端网站源码

在上一期&#xff0c;小编带大家盘点了年度炫云云渲染使用相关常见咨询问题TOP20。这份榜单不仅是对过去一年用户关注焦点的回顾&#xff0c;更是一个汇总了各类问题解答的宝典。无论您是初次使用还是老用户&#xff0c;都能帮助您更快速地解决疑问&#xff0c;提升使用炫云各类…

做网站用什么空间网站项目建设合同

Sqli-labs-Less-9 前言&#xff1a; SQL注入的三个条件&#xff1a; ①参数可控&#xff1b;&#xff08;从参数输入就知道参数可控&#xff09; ②参数过滤不彻底导致恶意代码被执行&#xff1b;&#xff08;需要在测试过程中判断&#xff09; ③参数带入数据库执行。&#…

网站开发学什么语音北京logo设计制作

来源&#xff1a;《科学进展》概要&#xff1a;一种以神经元为模型的超导计算芯片&#xff0c;能比人脑更高效快速地加工处理信息。一种以神经元为模型的超导计算芯片&#xff0c;能比人脑更高效快速地加工处理信息。近日刊登于《科学进展》的新成果&#xff0c;或许将成为科学…

有哪些做投行网站做网站一年的维护费用是多少

随着数字媒体的发展&#xff0c;越来越多的人开始需要处理带有水印的图片或视频。水印不仅是一种版权保护手段&#xff0c;也常常被用来标记图片或视频的来源。然而&#xff0c;在某些情况下&#xff0c;我们可能需要去除水印以实现更好的使用效果。那么&#xff0c;去水印软件…

襄阳论坛网站建设公司网站怎么做才能有官网二字

目录 前言static 作用在变量上static 作用在全局变量上static 作用在局部变量上static 作用在成员变量上 static 作用在函数上static 作用在函数上static 作用在成员函数上 前言 在 C/C 中&#xff0c;关键字 static 在不同的应用场景下&#xff0c;有不同的作用&#xff0c;这…

临沂网站建设网站推广茂名专业做网站公司

Azure 中的云原生开发工具 Azure 包含一系列用于云原生应用程序开发的内置工具和服务。这里介绍的服务和工具是很好的入门选择。 发展 Azure 包括两个用于开发和构建云原生应用程序的主要工具&#xff1a;Visual Studio (VS) 和Azure应用服务。 VS 是一个集成开发环境&#…

有没有专门做纸箱的网站网站域名注册空间

前言 这几天看到很多小伙伴都在安装虚拟机&#xff0c;但成不成就不知道了。 所以小白准备把自己安装完成的系统打包分享给小伙伴。 如果你需要已经安装完成的虚拟系统&#xff0c;可以获取哦&#xff01;打开即用&#xff01; 虚拟机系统包括&#xff1a; Win10 专业版 Wi…

广州越秀网站制作博达高校网站群建设教程

1、super() 是一个Python内置函数&#xff0c;用于调用父类的方法。通过调用super()返回的对象的方法&#xff0c;可以在子类中访问父类的属性和方法&#xff0c;并在需要的情况下进行扩展或修改。 super()函数的一般语法是super().method()&#xff0c;其中method是父类中的…

江门网站建设哪家快建设单位适合去哪个网站看资料

1. 项目文件介绍 本章为二值图像的分割任务做统一实现&#xff0c;下面是项目的实现目录 项目和文章绑定了&#xff0c;之前没用过&#xff0c;不知道行不行 data 文件夹下负责摆放数据的训练集测试集inference 负责放待推理的图片(支持多张图片预测分割)run_results 是网络训…

廊坊网站建设方案网站建设项目需求分析报告

在本文中&#xff0c;我们将了解不同的事件&#xff0c;ASP.NET 应用程序的生命周期以浏览器向 Web 服务器&#xff08;对于 ASP.NET 应用程序&#xff0c;通常为 IIS&#xff09;发送请求为起点&#xff0c;直至将请求结果返回至浏览器结束。在这个过程中&#xff0c;首先我们…

电子商务网站设计方案广州企业网站建设推荐

发布时间&#xff1a;2024/05/22 如果您有适合我的项目机会给到我&#xff0c;这是我的简历&#xff1a;Resume 思路&#xff1a; 思路原理&#xff1a;实践发现href为null或者" "的时候是不起作用的 将href属性绑定的固定路径设置为响应式数据变量a&#xff0c;a初…

创建公司网站需要注意什么百度一下你就知道下载安装

在视频编辑和处理的领域&#xff0c;转换格式是一项常见的任务。在某些编辑和发布工作中&#xff0c;可能需要使用WMV格式。提前将素材转换为WMV可以节省在编辑过程中的时间和精力。从MP4到WMV的批量转换&#xff0c;不仅能使视频素材在不同的平台和设备上得到更好的兼容性&…

南海网站设计专业简历

文章目录 Mybatis-Plus 框架基础引入 maven 依赖定义实体类&#xff0c;并标注注解定义 Mapper 接口&#xff0c;要求继承自特定父接口使用 MapperScan 注解&#xff0c;扫描 mapper 接口所在位置验证 Mybatis-Plus 框架基础 MyBatis-Plus 是 MyBatis 的一种增强框架&#xff…

高新区网站建设 意义网站图片上字体动态怎么做的

js事件一、绑定事件1、html绑定2、el属性绑定3、el函数绑定4、事件捕获与冒泡5、js常见事件称名二、阻止事件1、event.stopPropagation()2、return false3、event.preventDefault();4、兼容写法一、绑定事件 1、html绑定 <div onclick"alert(click!)">click&…

门户网站如何制作网站域名所有权 查询

二叉树 二叉树是n个有限元素的集合&#xff0c;该集合或者为空、或者由一个称为根&#xff08;root&#xff09;的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成&#xff0c;是有序树。当集合为空时&#xff0c;称该二叉树为空二叉树。在二叉树中&#xff0c;一个…

温州做网站公司哪家好最新新闻热点事件2023摘抄

抖音在国内是比较知名的短视频运营商&#xff0c;也有很大的流量市场。这块优化好了&#xff0c;不管是对于用户还是企业来说&#xff0c;在品牌宣传上来说&#xff0c;作用还是蛮大的。抖音优化和电脑端优化&#xff0c;还是有所区别的&#xff0c;这里参考的是点赞数、评论以…