解難題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)
沒有留言:
張貼留言