leetcode 823 带因子的二叉树

用动态规划

如果两个节点值不同,要乘2,因为两个节点可以互换位置

dp[i] = dp[left] * dp[right] * 2

如果相同

dp[i] = dp[left] * dp[right]

java 复制代码
class Solution {
    public int numFactoredBinaryTrees(int[] arr) {
        Arrays.sort(arr);
        int n = arr.length;
        long[] dp = new long[n];
        long res = 0, mod = 1000000007;
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
            for (int left = 0, right = i - 1; left <= right; left++) {
                while (right >= left && (long) arr[left] * arr[right] > arr[i]) {
                    right--;
                }
                if (right >= left && (long) arr[left] * arr[right] == arr[i]) {
                    if (right != left) {
                        dp[i] = (dp[i] + dp[left] * dp[right] * 2) % mod;
                    } else {
                        dp[i] = (dp[i] + dp[left] * dp[right]) % mod;
                    }
                }
            }
            res = (res + dp[i]) % mod;
        }
        return (int) res;
    }
}
相关推荐
天赐学c语言几秒前
1.14 - 用栈实现队列 && 对模板的理解以及模板和虚函数区别
c++·算法·leecode
高洁01几秒前
AI智能体搭建(3)
人工智能·深度学习·算法·数据挖掘·知识图谱
不知名XL23 分钟前
day24 贪心算法 part02
算法·贪心算法
AI科技星28 分钟前
时空几何:张祥前统一场论20核心公式深度总结
人工智能·线性代数·算法·机器学习·生活
菜鸟233号33 分钟前
力扣518 零钱兑换II java实现
java·数据结构·算法·leetcode·动态规划
咋吃都不胖lyh1 小时前
Haversine 距离算法详解(零基础友好版)
线性代数·算法·机器学习
FPGA小c鸡1 小时前
FPGA通信基带算法完全指南:从理论到实战的DSP加速方案
算法·fpga开发
@Aurora.2 小时前
优选算法【专题三:二分查找算法】
算法
soldierluo2 小时前
向量与向量数据
人工智能·算法·机器学习