herrDeng網內搜尋

自訂搜尋

Ads

2023年6月16日 星期五

Python/C++用組合數學解難題Leetcode 1569重新排列陣列獲得相同二元搜尋樹之總數


解難題Leetcode 1569 Number of Ways to Reorder Array to Get Same BST 

Python/C++使用組合數學解決問題之方法:重新排列陣列獲得相同二元搜尋樹的方法數(內含python code) 首先,陣列的第一個元素必須成為樹的根節點。
接著將陣列分成左子樹和右子樹。 利用遞迴,如果左子樹和右子樹的子問題已經解決,分別返回數字 l 和 r,則可以使用以下公式解決問題: 
 總方法數 = l * r * C_左子樹長度^(N-1) -1 
 請記得要對計算結果進行模 10**9+7 的運算。
class Solution:   
    def numOfWays(self, nums: List[int]) -> int:
        Mod=10**9+7
        import math
        def Subproblem(nums: List[int]):
            n=len(nums)
            if n<=2: return 1
            root=nums[0]
            left=[]
            right=[]
            for y in nums[1:]:
                if y<root: left.append(y)
                else: right.append(y)
            return Subproblem(right)*Subproblem(left)%Mod*math.comb(len(nums)-1, len(left))%Mod
        return int((Subproblem(nums)-1)%Mod)

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章