新闻详情

新闻详情

首页 / 资讯中心 / 详情

元宝 LeetCode 113.路径总和 || rust实现

发布时间:2026/9/26 17:37:50来源:尧图网络
元宝    LeetCode 113.路径总和 || rust实现
LeetCode 113Path Sum II是一道经典的 深度优先搜索DFS 回溯 题目。解题思路从根节点开始遍历用一个“path” 动态记录从根到当前节点的路径。用“current_sum” 记录当前路径上节点值的总和。当遇到叶子节点时检查路径总和是否等于“targetSum”。如果相等将当前“path” 的拷贝加入结果集。回溯在递归返回前将当前节点从“path” 中弹出以便探索其他分支。Rust 实现代码在 LeetCode 中“TreeNode” 通常定义为“OptionRcRefCell”。以下是可以直接提交的完整代码// 假设 LeetCode 已提供 TreeNode 的定义// #[derive(Debug, PartialEq, Eq)]// pub struct TreeNode {// pub val: i32,// pub left: OptionRcRefCell,// pub right: OptionRcRefCell,// }// impl TreeNode {// #[inline]// pub fn new(val: i32) - Self { … }// }use std::rc::Rc;use std::cell::RefCell;impl Solution {pub fn path_sum(root: OptionRcRefCell, target_sum: i32) - VecVec {let mut result: VecVec Vec::new();let mut path: Vec Vec::new();if let Some(node) root { Solution::dfs(node, target_sum, 0, mut path, mut result); } result } // 深度优先搜索 fn dfs( node: RcRefCellTreeNode, target_sum: i32, current_sum: i32, path: mut Veci32, result: mut VecVeci32 ) { // 取出当前节点的值并加入路径 let val node.borrow().val; path.push(val); let new_sum current_sum val; // 先克隆左右子节点的引用避免持有 borrow 导致递归时 panic let left node.borrow().left.clone(); let right node.borrow().right.clone(); // 判断是否为叶子节点 if left.is_none() right.is_none() { if new_sum target_sum { // 找到一条合法路径克隆当前路径存入结果 result.push(path.clone()); } } else { // 递归遍历左右子树 if let Some(left_node) left { Solution::dfs(left_node, target_sum, new_sum, path, result); } if let Some(right_node) right { Solution::dfs(right_node, target_sum, new_sum, path, result); } } // 回溯离开当前节点将其从路径中移除 path.pop(); }}关键点解析Rust 特性“RcRefCell” 的使用LeetCode 的树节点使用“Rc”引用计数允许多个所有者“RefCell” 提供内部可变性。在递归前通过“.clone()” 获取左右子节点的“OptionRc…”这样不会长期持有“RefCell” 的借用避免运行时 panic。回溯与所有权“path” 通过“mut Vec” 传递在递归前后分别执行“push” 和“pop”手动维护路径状态。“result.push(path.clone())” 这里必须“clone”因为“path” 后续还会被修改。3. 效率时间复杂度O(N)每个节点访问一次。空间复杂度O(N)递归栈深度及存储路径所需的空间。如果你希望改成迭代法使用显式栈或者想了解如何处理 i32 溢出等边界情况也可以告诉我
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

并行流的幕后英雄:Fork/Join框架原理与性能陷阱 2026/9/26 18:28:22

并行流的幕后英雄:Fork/Join框架原理与性能陷阱

如果你和我一样,第一次看到list.parallelStream().map(...).collect(...)这种写法时心里想的是“这也太爽了吧”,那这篇文章多半能帮到你。并行流用起来确实爽,一行代码就能让数据源被多线程瓜分,但你有没有想过,paral…

阅读更多 →
Windows API Hook 屏幕取词实战:VC 源码解析与避坑指南 2026/9/26 18:28:22

Windows API Hook 屏幕取词实战:VC 源码解析与避坑指南

简介:这是一份面向Windows开发者的API Hook实战源码,聚焦屏幕取词这一典型应用场景,适合具备一定C与Win32编程基础、希望深入理解系统级Hook机制的学习者。源码围绕低级鼠标与键盘钩子的安装、事件处理与卸载流程展开,演示了如何借…

阅读更多 →
运营人必学:ChatGPT三大核心技能从内容生产到数据洞察 2026/9/26 18:28:22

运营人必学:ChatGPT三大核心技能从内容生产到数据洞察

1. 运营人为什么必须重新理解ChatGPT1.1 从“会聊天”到“能干活”的认知转变很多运营同行第一次接触ChatGPT,都是把它当成一个更聪明的搜索框——问一句答一句,问完就关掉。我刚开始也这样,直到有次赶一份活动复盘报告,凌晨两点还…

阅读更多 →
生成式广告多目标对齐、LLM重排与可微路径规划:离散决策与连续优化的融合实践 2026/9/26 18:28:22

生成式广告多目标对齐、LLM重排与可微路径规划:离散决策与连续优化的融合实践

1. 从标题拆解:这篇论文速递到底在讲什么1.1 三个关键词背后的技术版图先把标题拆开看。“生成式广告多目标对齐”说的是广告生成这件事,不再是单一指标优化,而是同时兼顾点击率、转化率、用户体验、商业收入等多个目标,让它们在一…

阅读更多 →
API分页方法详解与选择建议:TaoToken 统一 Key 下 offset/cursor/keyset 配置骨架 2026/9/26 18:28:22

API分页方法详解与选择建议:TaoToken 统一 Key 下 offset/cursor/keyset 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Mayr与Cassie电弧模型原理及Simulink断路器仿真实战 2026/9/26 18:28:15

Mayr与Cassie电弧模型原理及Simulink断路器仿真实战

电弧研究这件事,在电力系统里可以说是既基础又难啃的硬骨头。开关分合闸、故障开断、绝缘配合,哪一样都绕不开电弧。可是电弧本身看不见摸不着,就算用高速摄像机拍下了燃弧过程,录到了弧压弧流波形,拿到手的也只是一堆…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉