Leetcode 3715. Sum of Perfect Square Ancestors

  • [Leetcode 3715. Sum of Perfect Square Ancestors](#Leetcode 3715. Sum of Perfect Square Ancestors)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题整体的思路上就是一个树的遍历,我们遍历每一个节点,然后考察其所有的父节点当中有多少个元素与之相乘可以得到完全平方数即可。

但是,如果要暴力相乘然后判断平方数事实上还是非常麻烦的,因此这里我们做了一下优化,即对于每一个数,我们可以事先将其所有的平方数全部除掉,此时,找到平方数的操作就可以简化为求出其所有的父节点当中有多少与当前元素相同的元素即可。

2. 代码实现

给出python代码实现如下:

python 复制代码
def get_perfect_square(n):
    ans = []
    for i in range(2, n):
        if i * i > n:
            break
        ans.append(i*i)
    return ans

PerfectSquares = get_perfect_square(10**5)

class Solution:
    def sumOfAncestors(self, n: int, edges: List[List[int]], nums: List[int]) -> int:
        
        @lru_cache(None)
        def simplify(num):
            for ps in PerfectSquares:
                if ps > num:
                    break
                while num % ps == 0:
                    num = num // ps
            return num
        
        nums = [simplify(num) for num in nums]
        graph = defaultdict(list)
        for u, v in edges:
            graph[u].append(v)
            graph[v].append(u)

        ans = 0
        def dfs(u, p, history):
            nonlocal ans
            ans += history[nums[u]]
            history[nums[u]] += 1
            for v in graph[u]:
                if v == p:
                    continue
                dfs(v, u, history)
            history[nums[u]] -= 1
            return

        dfs(0, -1, defaultdict(int))
        return ans

提交代码评测得到:耗时756ms,占用内存88.90MB。

相关推荐
Sakinol#18 小时前
Leetcode Hot 100 ——动态规划part01
leetcode·动态规划
做一个码农都是奢望19 小时前
计算机控制系统:最小拍控制系统设计入门
数据结构·算法
米粒119 小时前
力扣算法刷题 Day 16
算法·leetcode·职场和发展
重生之后端学习19 小时前
31. 下一个排列
数据结构·算法·leetcode·职场和发展·排序算法·深度优先
Frostnova丶19 小时前
LeetCode 3212. 统计X和Y出现次数相等的子矩阵数量
算法·leetcode·矩阵
We་ct19 小时前
LeetCode 53. 最大子数组和:两种高效解法(动态规划+分治)
前端·算法·leetcode·typescript·动态规划·分治
sin°θ_陈19 小时前
CVPR 2026的3DGS卷到什么地步?工程语义上探:BrepGaussian如何打通图像到CAD的最后一公里?(Part III 1-3)
python·深度学习·算法·机器学习·3d·webgl
shehuiyuelaiyuehao19 小时前
算法9,滑动窗口,长度最小的子数组
数据结构·算法·leetcode
葳_人生_蕤19 小时前
hot100——动态规划
算法·动态规划
sheeta199819 小时前
LeetCode 每日一题笔记 日期:2025.03.18 题目:3070.元素和小于等于k的子矩阵的数目
笔记·leetcode·矩阵