midium,還好
思路上,之前做過基礎的,也就是96題,便想繼續用動態規劃做,用乙個二維treenode表來儲存0-n個對應的所有樹,用另乙個陣列儲存0-n對應能生成的樹的數目。
寫著寫著發現還要寫乙個函式把每乙個節點的值修改一下,嫌麻煩就換了遞迴的方法。
基本思路:
過載函式,接受兩個值,l和r,對應左限和右限,輸入後,從左到右每乙個節點依次作為根節點,將根節點左右兩部分遞迴,結果作為左子樹和右子樹,遍歷生成所有組合,最後返回列表。
上**
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class
solution;}
return
generatetrees(1
,n);
}
vector>
generatetrees
(int l,
int r)
;//if(l==r) return treenode(l);
vector> res;
for(
int i=l;i<=r;i++)}
return res;}}
;
值得注意的是,當n=0 時,應該直接返回空表,需要進行特殊處理,否則執行時間會巨長,並錯誤。
另外,當根節點是左限或右限時,應返回空指標,這裡用的是,而不是我想用的null或者單獨nullptr,具體原理沒有查到,待我問問吧。
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...