LeetCode 823. 带因子的二叉树(动态规划)
生活随笔
收集整理的這篇文章主要介紹了
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 解釋: 我們可以得到這些二叉樹: [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 記錄位置
- p=A[i]?A[j]p= A[i]*A[j]p=A[i]?A[j] 在數組中,i≠j,dp[map[p]]+=dp[i]?dp[j]?2i \neq j, dp[map[p]] += dp[i]*dp[j]*2i?=j,dp[map[p]]+=dp[i]?dp[j]?2,左右節點可以互換 *2
- p=A[i]?A[j]p= A[i]*A[j]p=A[i]?A[j] 在數組中,i=j,dp[map[p]]+=dp[i]?dp[j]i = j, dp[map[p]] += dp[i]*dp[j]i=j,dp[map[p]]+=dp[i]?dp[j]
- 最后答案是 sum(dp[i])%modsum(dp[i])\%modsum(dp[i])%mod
52 ms 9.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 823. 带因子的二叉树(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1039. 多边形三角
- 下一篇: LeetCode 1717. 删除子字符