解題思路:本題使用動態規劃的方法,題目要求求出n個節點的二叉搜尋樹。由於所有的節點為1~n的序列,且根據二叉搜尋樹的特徵,當選取了1~n中某個數,y作為根節點時,左子樹為1~y-1,右子樹則為y+1~n,且由於右子樹的排列情況與1~n-y的排列情況一致。
所以此處分別使用total[y-1],total[n-y]來表示其排列情況,也就是說當y作為根節點時,不同的二叉搜尋樹總個數為total[y-1]*total[n-y]。再利用y遍歷n,便可求出toatl[n]的狀態方程為,total[n]+=total[y-1]*total[n-y],y∈[1,n]。但此時仍未知total的具體值,顯然邊界情況toatl[0],total[1]的值均為1,但total[2~n]的數值未知。此時便再利用乙個i遍歷n,將狀態方程中的n改為i,便可求出最終結果。
注意點:
由於total需儲存0~n的情況,所以total陣列的容量為n+1,遍歷時i範圍為[2,n],y範圍為[1,i]
空間複雜度: o(n)
時間複雜度: o(n^2)
題後總結:
優:能較快的反應出使用動態規劃解決問題,且大致結構正確
差:掌握仍不熟練,對於變數的範圍,陣列的容量把握的不夠精準
2020 8 4 力扣每日
儲存0入度元素 14for int i 0 i numcourses i 18while queue.isempty 26 27return count numcourses 判斷拓撲排序元素個數是否與課程數一致28 29 解題思路 根據題目中先修課程的描述,其與有向圖的構造類似,而判斷最終是否可以...
2020 7 23 力扣每日
解題思路 這是一道經典的動態規劃題目,由於移動方向為向右與向下,說明除了第一行第一列以外,其餘點的對應最小路徑和,只可能是從左移動至當前位置的路徑和,或是從上方移動至當前位置的路徑和。我們使用二維陣列dp row col 儲存所有點的對應路徑和情況。用up,left分別儲存從上,與從左的兩種情況,顯...
2020 7 21 力扣每日
解題思路 該題與先前的7.15日的每日一題相似,兩者都是不同的二叉搜尋樹,不同的是,先前只需返回總數,而該題需要返回所有的樹,但解題思路是相似的,要解決根節點的情況就要解決左右子樹的情況,這裡同樣可以使用動態規劃來實現,但此處先用遞迴來實現,便於理解。根據二叉搜尋樹的性質,顯然,i作為根節點時的左子...