国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

823.帶因子的二叉樹

這篇具有很好參考價值的文章主要介紹了823.帶因子的二叉樹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  1. 帶因子的二叉樹

題目

給出一個含有不重復整數(shù)元素的數(shù)組 arr ,每個整數(shù) arr[i] 均大于 1。

用這些整數(shù)來構建二叉樹,每個整數(shù)可以使用任意次數(shù)。其中:每個非葉結點的值應等于它的兩個子結點的值的乘積。

滿足條件的二叉樹一共有多少個?答案可能很大,返回 對 109 + 7 取余 的結果。

示例

示例 1:

輸入: arr = [2, 4]
輸出: 3
解釋: 可以得到這些二叉樹: [2], [4], [4, 2, 2]

示例 2:

輸入: arr = [2, 4, 5, 10]
輸出: 7
解釋: 可以得到這些二叉樹: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2]

提示

1 <= arr.length <= 1000
2 <= arr[i] <= 109
arr 中的所有值 互不相同

思路

  1. 題目中要的是父親節(jié)點的val = 左孩子.val * 右孩子的val, 根據(jù)題目的意思,單節(jié)點也算

  2. c = b*a,所有看看能不能枚舉c =》是可以枚舉的,將原有數(shù)組進行排序(升序

  3. 當枚舉到下標的i的時候,有多少種呢?這里有一個dp數(shù)組來做存儲

  4. 定義dp數(shù)組 long[] dp ,當下表來到i的時候,滿足條件的二叉樹的個數(shù) dp[i] = xxx

  5. 具體的計算邏輯 arr[i] = arr[x] * arr[y],只有在滿足這種條件的時候才能算一種

  6. 此時的值是 arr[i] , 題目中給出了每個元素都不一樣,所以要想在排序好的數(shù)組里面找到一個因子是屬于arr[i]的,那么這個因子arr[j]的下標 j < i,并且另外一個因子也是屬于arr的,此時就轉換成了一個因子拆分的問題,在拆分的過程中,需要將下標i之前的全部因子都看一遍

  7. dp[i] = dp[j] * d[k] (arr[j], arr[k]) 都在arr中,這里為啥是乘法?左邊有m種,右邊有n種,總的就是m*n種

  8. 結果就是遍歷一下dp數(shù)組,將和加起來就ok了文章來源地址http://www.zghlxwxcb.cn/news/detail-693888.html

  9.         //對原有數(shù)組排序
            Arrays.sort(arr);
            //記錄other的值,以及下 c = a/b,方便check
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < arr.length; i++) {
                map.put(arr[i], i);
            }
            //定義的dp數(shù)組
            long[] dp = new long[arr.length];
            //每個元素都會存在一種情況,這里就默認初始化成1
            Arrays.fill(dp, 1);
            for (int i = 1; i < arr.length; i++) {
                for (int j = 0; j < i; j++) {
                    //說明arr[j]是因子,并且另外一個因子也是在arr中的
                    if (arr[i] % arr[j] == 0 && map.containsKey(arr[i] / arr[j])) {
                        int k = map.get(arr[i] / arr[j]);
                        dp[i] += (dp[j] * dp[k]) % mod;
                    }
                }
            }
            //計算結果
            long res = 0;
            for (long j : dp) {
                res += j;
                res %= mod; //越界問題處理
            }
            return (int) (res % mod);
    

到了這里,關于823.帶因子的二叉樹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包