這幾天拯救世界去了(就是偷懶了),一直沒更博。這次練習的是leetcode上標籤為動態規劃、列表為熱題top100、難度為中等的幾道題目。題解有官方題解也有個人題解,有的地方意思可能表達得不是很清楚也可能存在錯誤,有問題請提出,感謝❤
題目描述:
給定乙個整數 n,求以 1 … n 為節點組成的二叉搜尋樹有多少種?示例:
輸入: 3解釋:輸出: 5
給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
題解:
1.給出的序列已經是按1到n排好序了啦,設n個數的所有二叉搜尋樹有g(n)種。g(n)等於以1到n為根節點的樹集合。
易得邊界g(0) = 1,g(1) = 1
狀態方程:g(n) = g(i-1)* g(n-i)
public
class
solution
}return g[n];}
}
題目描述:
乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?
示例 1:
輸入: m = 3,解釋:n = 2 輸出: 3
從左上角開始,總共有 3 條路徑可以到達右下角。
向右 -> 向右 -> 向下
向右 -> 向下 -> 向右
向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3
輸出: 28
提示:
1 <= m, n <= 100
題目資料保證答案小於等於 2 * 10 ^ 9
題解:
1.小弟不才,一股腦管不上優化不優化,按動態規劃的套路就寫下**。
使用 dp[j][i] 存放到達橫座標 j 縱座標為 i 的所有路徑。
因為只能向右走和向下走,所以有狀態方程:dp[j][i] = dp[j-1][i] + dp[j][i-1]
確定下邊界第一行和第一列的每個位置的所有路徑都是一,
class
solution
}return dp[m-1]
[n-1];
}}
leetcode刷題記錄
我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...
LeetCode刷題記錄
動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...
leetcode刷題記錄
工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...