Kimi    LeetCode 3715. 完全平方数的祖先个数总和 Python3实现
以下是 LeetCode 3715. 完全平方数的祖先个数总和 的 Python3 实现基于 DFS 哈希表 无平方因子核预处理的思路。---核心思路关键数学性质两个数 a × b 是完全平方数当且仅当它们去掉所有平方因子后的剩余部分无平方因子核相等。例如- 8 2³去掉 2²偶数指数剩余 2¹ → core[8] 2- 2 2¹ → core[2] 2- 16 2⁴ → 所有指数都是偶数 → core[16] 1所以 nums[i] × nums[ancestor] 为完全平方数 ⇔ core[nums[i]] core[nums[ancestor]]算法1. 预处理所有数的无平方因子核 core[x]2. DFS 遍历树用哈希表 cnt 记录当前路径上各 core 值的出现次数3. 对每个非根节点查询 cnt[core[nums[i]]] 即为符合条件的祖先个数4. 回溯时恢复现场---Python3 代码pythonfrom typing import Listfrom collections import defaultdictclass Solution:# 预处理计算每个数的无平方因子核square-free core# core[x] 去掉 x 中所有平方因子后剩余的部分MX 100001core [0] * MXclassmethoddef _init_core(cls):类方法只需执行一次预处理if cls.core[1] ! 0:return # 已经初始化过for i in range(1, cls.MX):if cls.core[i] 0: # i 本身是无平方因子数j 1while i * j * j cls.MX:cls.core[i * j * j] ij 1def sumOfAncestors(self, n: int, edges: List[List[int]], nums: List[int]) - int:self._init_core()# 建图无向树g [[] for _ in range(n)]for u, v in edges:g[u].append(v)g[v].append(u)ans 0# cnt[c] 当前DFS路径上 core 值为 c 的节点个数cnt defaultdict(int)def dfs(x: int, fa: int):nonlocal ansc self.core[nums[x]]# 当前节点的祖先中core 值相同的个数ans cnt[c]cnt[c] 1for y in g[x]:if y ! fa:dfs(y, x)# 回溯恢复现场cnt[c] - 1dfs(0, -1)return ans---复杂度分析项目 复杂度预处理 core O(MX \cdot \sqrt{MX})实际约 10^5 \times 10建图 O(n)DFS 遍历 O(n)总时间 O(n MX \cdot \sqrt{MX})空间 O(n MX)---示例验证示例 1n3, edges[[0,1],[1,2]], nums[2,8,2]节点 nums core 祖先core计数 贡献0 2 2 {} 01 8 2 {2:1} 12 2 2 {2:2} 2总和 0 1 2 3 ✓示例 2n3, edges[[0,1],[0,2]], nums[1,2,4]节点 nums core 祖先core计数 贡献0 1 1 {} 01 2 2 {1:1} 02 4 1 {1:1} 1总和 0 0 1 1 ✓---另一种写法更简洁直接修改 nums如果不想用类变量预处理也可以直接对每个 nums[i] 做质因数分解去掉所有平方因子pythonfrom typing import Listfrom collections import defaultdictclass Solution:def sumOfAncestors(self, n: int, edges: List[List[int]], nums: List[int]) - int:# 预处理去掉每个 nums[i] 中的所有平方因子for i in range(n):x nums[i]d 2while d * d x:while x % (d * d) 0:x // d * dd 1nums[i] xg [[] for _ in range(n)]for u, v in edges:g[u].append(v)g[v].append(u)ans 0cnt defaultdict(int)def dfs(x: int, fa: int):nonlocal ansc nums[x]ans cnt[c]cnt[c] 1for y in g[x]:if y ! fa:dfs(y, x)cnt[c] - 1dfs(0, -1)return ans两种方法本质相同第二种更简洁但第一种预处理 core 数组在多次调用时效率更高。两种方法都能通过 n \le 10^5 的数据范围。

相关新闻

Linux 常见文件后缀

Linux 常见文件后缀

1、脚本/可执行类 .sh Bash/Shell 脚本 .bash bash专用脚本,和.sh几乎通用 .zsh zsh解释器脚本 .py Python脚本 .pl Perl脚本 .js NodeJS脚本 .go Go源码 .c/.cpp/.h C/C源码 .jar Java打包程序 .elf Linux原生可执行二进制…

2026/7/27 6:19:17阅读更多 →
Claude智能体架构解析:企业级AI自动化实践指南

Claude智能体架构解析:企业级AI自动化实践指南

1. Claude Managed Agents:企业级AI智能体的基础设施革命当Notion的产品经理Eric Liu在团队会议上展示他们最新集成的AI功能时,现场响起了掌声。他简单输入了一个需求:"整理上周所有用户反馈,按优先级排序,并生成…

2026/7/27 6:19:17阅读更多 →
深度解析:北森商业综合推理测评核心题型与高分解题策略|聚焦中高层选拔 | 核心能力测定 | 40分钟28题详解|华东同舟求职内部培训资料

深度解析:北森商业综合推理测评核心题型与高分解题策略|聚焦中高层选拔 | 核心能力测定 | 40分钟28题详解|华东同舟求职内部培训资料

在当前企业人才选拔与组织发展的进程中,标准化的认知与能力测评已成为中高层核心岗位招聘及干部储备的关键环节。行业内广泛采用的评估工具,如SHL、AON、TAS倍智以及盖洛普(Gallup)等,均从不同维度对候选人进行深度画像…

2026/7/27 6:19:17阅读更多 →
DM6467硬件设计核心:仿真控制、电源时钟与上拉电阻实战解析

DM6467硬件设计核心:仿真控制、电源时钟与上拉电阻实战解析

1. 项目概述:深入DM6467的硬件设计核心在嵌入式系统,尤其是涉及音视频编解码、通信处理这类复杂实时任务的领域,硬件平台的稳定性和可调试性直接决定了项目的成败。我接触过不少基于TI Davinci系列DMSoC(数字媒体片上系统&#xf…

2026/7/27 7:41:23阅读更多 →
2公里链路掉线率30%:组串式逆变器RS485级联的那些通讯坑

2公里链路掉线率30%:组串式逆变器RS485级联的那些通讯坑

去年 8 月,我们在山东一个 30MW 的工商业屋顶电站项目上遇到了极其诡异的现象。每天下午 2 点到 4 点,逆变器的掉线率会莫名其妙地飙升到 30% 以上。运维团队在现场排查了三天,从逆变器过热到交流侧谐波查了个遍,最后发现问题竟然…

2026/7/27 7:41:23阅读更多 →
深入解析SRIO接口:从物理层信号到逻辑层事务的嵌入式高速通信实战

深入解析SRIO接口:从物理层信号到逻辑层事务的嵌入式高速通信实战

1. 项目概述与核心价值串行RapidIO(SRIO)接口,对于长期深耕于高性能嵌入式系统、多核DSP或FPGA信号处理板卡开发的工程师来说,绝对是一个绕不开的核心技术。它不像PCIe那样在消费级领域广为人知,但在雷达、通信基站、医…

2026/7/27 7:41:23阅读更多 →
ARM03-蜂鸣器和中断

ARM03-蜂鸣器和中断

一、实现蜂鸣器功能① 蜂鸣器功能实现步骤:(1)查看原理图设计(2)查阅IMX6ULL参考手册,按以下顺序配置:开启外设时钟设置引脚复用功能配置引脚电气属性设置GPIO方向寄存器配置GPIO数据寄存器② 在…

2026/7/27 7:41:23阅读更多 →
【音频基础学习】第 13 天,把概念映射到工程代码

【音频基础学习】第 13 天,把概念映射到工程代码

前言 前 12 天你已经学了很多音频概念。第 13 天要做一件很实际的事:把概念映射到代码里。 当你看一个 Qt C FFmpeg QML 音频工具项目时,会经常看到: sampleRatechannelsbitsPerSamplePCM bufferframe countbyte offsetPeakRMSexport 这些…

2026/7/27 7:41:23阅读更多 →
AI大模型学习路径与Transformer架构实战指南

AI大模型学习路径与Transformer架构实战指南

1. AI大模型时代的学习路径规划去年当我第一次接触GPT-3时,就像打开了新世界的大门。作为一个在传统软件开发领域摸爬滚打十年的工程师,我深刻意识到:AI大模型正在重塑整个技术生态。但面对这个快速发展的领域,很多初学者往往不知…

2026/7/27 7:39:23阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →