贵阳网站推广百度网站排名查询
news/
2025/9/27 3:45:31/
文章来源:
贵阳网站推广,百度网站排名查询,天津建设银行网站首页,河北邯郸做网站文章目录1. 题目2. 解题1. 题目
给出一个含有不重复整数元素的数组#xff0c;每个整数均大于 1。
我们用这些整数来构建二叉树#xff0c;每个整数可以使用任意次数。
其中#xff1a;每个非叶结点的值应等于它的两个子结点的值的乘积。
满足条件的二叉树一共有多少个每个整数均大于 1。
我们用这些整数来构建二叉树每个整数可以使用任意次数。
其中每个非叶结点的值应等于它的两个子结点的值的乘积。
满足条件的二叉树一共有多少个返回的结果应模除 10 ** 9 7。
示例 1:
输入: A [2, 4]
输出: 3
解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2]示例 2:
输入: A [2, 4, 5, 10]
输出: 7
解释: 我们可以得到这些二叉树: [2], [4], [5], [10],
[4, 2, 2], [10, 2, 5], [10, 5, 2].提示:
1 A.length 1000.
2 A[i] 10 ^ 9.来源力扣LeetCode 链接https://leetcode-cn.com/problems/binary-trees-with-factors 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
dp[i]dp[i]dp[i] 表示以 A[i]A[i]A[i] 为根的二叉树个数A[i]1A[i]1A[i]1 越往上根的值越大对数组排序并哈希 mapmapmap 记录位置pA[i]∗A[j]p A[i]*A[j]pA[i]∗A[j] 在数组中i≠j,dp[map[p]]dp[i]∗dp[j]∗2i \neq j, dp[map[p]] dp[i]*dp[j]*2ij,dp[map[p]]dp[i]∗dp[j]∗2左右节点可以互换 *2pA[i]∗A[j]p A[i]*A[j]pA[i]∗A[j] 在数组中ij,dp[map[p]]dp[i]∗dp[j]i j, dp[map[p]] dp[i]*dp[j]ij,dp[map[p]]dp[i]∗dp[j]最后答案是 sum(dp[i])%modsum(dp[i])\%modsum(dp[i])%mod
class Solution {
public:int numFactoredBinaryTrees(vectorint A) {int n A.size(), i, j;if(n 1) return 1;vectorlong long dp(n, 1);sort(A.begin(), A.end());unordered_mapint,int m;for(i 0; i n; i)m[A[i]] i;long long ans 0, p, mod 1e97;for(i 0; i n; i){for(j 0; j i; j){p (long long)A[j]*A[i];if(p int(1e9))break;if(m.find(p) ! m.end()){if(i ! j)dp[m[p]] (2*dp[i]*dp[j])%mod;elsedp[m[p]] (dp[i]*dp[j])%mod;}}}for(int i 0; i n; i)ans (ansdp[i])%mod;return ans;}
};52 ms 9.5 MB 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919051.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!