@@ -9,4 +9,5 @@ mod unique_paths_2;
mod edit_distance;
mod climbing_stairs;
mod edit_distance2;
-mod decode_ways;
+mod decode_ways;
+mod unique_binary_search_trees;
@@ -0,0 +1,30 @@
+struct Solution;
+
+impl Solution {
+ pub fn num_trees(n: i32) -> i32 {
+ let mut dp = vec![0; n as usize + 1];
+ dp[0] = 1;
+ dp[1] = 1;
+ for i in 2..=n as usize {
+ for j in 1..=i {
+ dp[i] += dp[j-1] * dp[i-j];
+ }
+ dp[n as usize]
+}
+#[cfg(test)]
+mod tests {
+ use super::*;
+ #[test]
+ fn test_num_trees() {
+ let n = 3;
+ let res = Solution::num_trees(n);
+ assert_eq!(res, 5);
@@ -1 +1 @@
-mod inorder_traversal;
+mod inorder_traversal;