leetcode 823. Binary Trees With Factors(因子二叉树)

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权 uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权报错信息11:39:47.976 安装 .hap 到鸿蒙设备 ...11:39:48.517 运行所需的权限没有签名授权,请参考 配置文档11:39:48.517 安装失败。 阅读详情

Given an array of unique integers, arr, where each integer arr[i] is strictly greater than 1.

We make a binary tree using these integers, and each number may be used for any number of times. Each non-leaf node’s value should be equal to the product of the values of its children.

Return the number of binary trees we can make. The answer may be too large so return the answer modulo 109 + 7.

Example 1:

Input: arr = [2,4]
Output: 3
Explanation: We can make these trees: [2], [4], [4, 2, 2]
Example 2:

Input: arr = [2,4,5,10]
Output: 7
Explanation: We can make these trees: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2].

Constraints:
1 <= arr.length <= 1000
2 <= arr[i] <= 109
All the values of arr are unique.

数组里面的数字可用来作树的节点,可以重复使用。
非叶子的节点的数字要等于它的children节点的乘积。
节点可以单独组成二叉树。

问可以组成多少个这样的二叉树。

思路:

首先想到的是要从小到大组成树,这样大的数字才能是小的数字的乘积,所以要把数组排序。

然后可以想到的是root的个数应该是左子树个数与右子树个数的乘积,
比如左子树有5种,右子树有6种,
那么左边的每一种都可以对应右边的6种,所以是乘法。

那么每次是不是都需要计算左右子树的个数?如果都计算,遇到重复的数字就会发生重复的计算,
所以要用DP,保存已经计算好的。

用dp[i]表示数字 ℹ 可以形成的二叉树个数。
每个数字可单独形成二叉树,所以dp[i] = 1。

arr[i]不是连续的数字,所以用hashMap作为dp数组,
从小到大遍历数字,遇到ℹ 是2个数乘积的,dp[i] += dp[左] * dp[右], 其中左 ✖ 右 = ℹ

最后把hashMap中的value相加。

注意相加时可能超出int的最大范围,所以用long, 不要忘了 % mod。

public int numFactoredBinaryTrees(int[] arr) {
    int n = arr.length;
    int mod = 1000000007;
    Long res = 0l;
    HashMap<Integer, Long> dp = new HashMap<>();
    
    Arrays.sort(arr);
    
    for(int i = 0; i < n; i ++) {  //arr下标
        dp.put(arr[i], 1l);
        for(int j = 0; j < i; j ++) {  //arr下标
            if(arr[i] % arr[j] == 0 && dp.containsKey(arr[i] / arr[j])) {
                dp.put(arr[i], (dp.get(arr[i]) + dp.get(arr[j]) * dp.get(arr[i]/arr[j]))%mod);
            }
        }
    }
    for(Long values : dp.values()) {
        res += values;
    }
    return (int)(res % mod);
}
【Nordic实战】nRF54L15引脚规划:电源域、专用引脚与低功耗设计避坑指南 本文深入解析Nordic nRF54L15芯片的引脚规划策略,重点阐述其基于电源域(MCU域、PERI域、LP域)的GPIO分配原则。文章提供了从思维转变到实战避坑的完整指南,强调遵循专用引脚与域对应关系是实现超低功耗设计的关键,并分享了系统化的引脚规划流程与工具使用建议。 阅读详情

相关推荐

python-调用动态链接库dll/so的方法

使用python ctyeps CDLL来调用linux下的so动态链接库或windows下的dll动态链接库

XIAOXIANG233233的博客 3662

leetcode 823

leetcode 823

weixin_42702885的博客 265

【Cadence 17.4实战】----- 基于MySQL与ODBC的企业级CIS数据库配置全攻略

本文详细介绍了如何在Cadence 17.4中配置基于MySQL与ODBC的企业级CIS数据库,提升硬件设计团队的元器件管理效率。通过实战案例和避坑指南,帮助读者掌握数据库部署、ODBC驱动配置及CIS参数映射等关键技巧,实现设计数据的实时同步与高效管理。

weixin_30591551的博客 327

823. Binary Trees With Factors

Given an array of unique integers, each integer is strictly greater than 1.We make a binary tree using these integers and each number may be used for any number of times.Each non-leaf node's value sho...

Do not mess it up 510

AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程

由于需要学习一下atmel的atsaml 系列,使用AtmelStudio 7开发,之前主要用STM32,现在看到Atmel的库函数,其实是有些类相似的。 ASF3的库对应ST的标准库。ASF4对应ST的HAL库,Ateml Start对应STM32CubeMX。但在这里还是用ASF3来开发,因为Ateml Start还不支持我的这个芯片,而且和STM32的HAL库类似,ASF4为了好移植都是底...

yxy244的博客 8653

基于 OpenCVSharp 的晶圆缺口自动检测与旋正方案

在半导体制造过程中,晶圆(Wafer)需要精确定位才能进行后续加工。每个晶圆边缘都有一个特定的缺口,这个缺口就像 "箭头" 一样,帮助机器确定晶圆的方向。我们的任务就是通过摄像头拍摄的图片,自动找到这个缺口的位置,计算出需要旋转多少角度才能让晶圆对准正确方向。简单来说,这个技术就像给晶圆 "找方向",确保它在生产线上始终保持正确的姿态。

品质生活,极致编程。 1210

【LeetCode】823. Binary Trees With Factors 解题报告(Python)

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法动态规划相似题目参考资料日期 题目地址:https://leetcode.com/problems/binary-trees-with-factors/description/ 题目描述 Given an array of unique integers, ...

负雪明烛 1195

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)

SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。

RXXW_Dor的博客 1780

[Leetcode] 823. Binary Trees With Factors 解题报告

题目:Given an array of unique integers, each integer is strictly greater than 1.We make a binary tree using these integers and each number may be used for any number of times.Each non-leaf node's value ...

魔豆(Magicbean)的博客 777

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1670

2026年数学建模国赛B题无线电干扰源的快速自动定位与清除 论文详细解析

数学建模竞赛论文无线电干扰源的快速自动定位与清除2026 年高教社杯全国大学生数学建模竞赛 B 题完整求解论文交会定位、极大极小测点优化、自适应多频道搜索与定向源恢复的统一建模模型、算法、代码、图表与验证一体化交付本文研究圆形目标区域中多个未知无线电干扰源的快速检测、定位与清除问题,建立了由误差楔交会模型、角度观测信息模型、分层勘测模型、鲁棒射线交会模型和定向覆盖反馈模型组成的统一求解框架。模型同时覆盖题目中的四个子问题:多测向射线形成的多边形定位区域及直径、第二个测点的极大极小优选、全向源自动搜索清除策略

YOLO 356

leetcode 823. Binary Trees With Factors

leetcode 823. Binary Trees With Factors 原题地址:https://leetcode.com/problems/binary-trees-with-factors/ 题目 Given an array of unique integers, each integer is strictly greater than 1. We make a b...

birdreamer的博客 528

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

leetcode 823. Binary Trees With Factors 带因子的二叉树

邹九的个人博客 385

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[Swift]LeetCode823. 带因子的二叉树 | Binary Trees With Factors

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30639719的博客 171

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode //C - 823. Binary Trees With Factors

This problem requires counting the number of different binary trees that can be constructed with a given integer array, where each non-leaf node is equal to the product of the values of its children. The solution uses a dynamic programming approach, first

Made in Code 9687

【LeetCode 823】 Binary Trees With Factors

题目描述 Given an array of unique integers, each integer is strictly greater than 1. We make a binary tree using these integers and each number may be used for any number of times. Each non-leaf node’s va...

iCode_girl的博客 169

【Leetcode】823. Binary Trees With Factors

要求以这些数字构成若干非空二叉树,每个非叶子的节点的值应当是其左右孩子的值的乘积(规定非叶子节点必须有两个孩子),问能构成多少个二叉树。每个值可以用无限次。为树根的情况下能构成多少个不同的二叉树,那么其所有后代的值必然都是。为树根的二叉树方案数的乘积。最后求一下总和即可。之前的值,从而可以枚举其左孩子的值,如果左孩子是。中存在,则这种方案存在,方案数即为以。的数字各不相同的数组。

数学、算法爱好者的博客 404

[Leetcode] 823. Binary Trees With Factors

方法1 Dynamic Programming dp[k] += dp[i] * dp[j], if arr[i] * arr[j] == arr[k] initialize all dp[k] = 1 we need to use hashmap or two pointers to get possible arr[i] and arr[j], otherwise the total time complexity is O(N**3), exceed time limit time complexit

weixin_44473990的博客 166

LeetCode-823.带因子的二叉树

代码: class Solution { public: int binarysearch(vector<int>& A,int target,int begin,int end){ if(begin>end) return -1; int mid=(begin+end)/2; if(A[mid]==target) return mid; else if(A[mid]>target) return bi.

weixin_44227633的博客 255

Leetcode:823.带因子的二叉树

给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个?返回的结果应模除 10 ** 9 + 7。   示例 1: 输入: A = [2, 4] 输出: 3 解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2] 示例 2:...

qq_23523409的博客 457

LeetCode 823. 带因子的二叉树(动态规划)

文章目录1. 题目2. 解题 1. 题目 给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个?返回的结果应模除 10 ** 9 + 7。 示例 1: 输入: A = [2, 4] 输出: 3 解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2] 示例 2: 输入: A = [2, 4, 5, 10] 输出: 7 解释: 我们可以得到这些二叉树

Michael是个半路程序员 926

leetcode 823. 带因子的二叉树

leetcode 823. 带因子的二叉树题目分析总体尚待优化代码 题目 给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个?返回的结果应模除 10 ** 9 + 7。 示例 1: 输入: A = [2, 4] 输出: 3 解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2] 示例 2: 输入: A = [2, 4, 5, 10] 输出

qq_43688155的博客 357

LeetCode(823)--翻转图像

题目 832.翻转图像 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。 反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。 示例 1: 输入:[[1,1,0],[1,0,1],[0,0,0]] 输出:[[1,0,0],[0,1,0],[1,1,1]] 解释:首先翻转每一行: [[0,1

叶卡捷琳堡的博客 254

leetCode汇总

java-leet-code 每天一道leetCode,保持思维活跃 explore(27) # Title Tag 001 Two Sum Array HashTable 007 Reverse Integer String 008 String to Integer String Array 014 Lo...

mcrwayfun,欢迎你 9360

823. Binary Trees With Factors (树上的动态规划)

题意:Given an array of unique integers, each integer is strictly greater than 1. We make a binary tree using these integersand each number may be used for any number of times. Each non-leaf no...

weixin_30753873的博客 183
上一篇: leetcode 729. My Calendar I(日程1)
下一篇: ViT结构详解(附pytorch代码)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值