class Solution96 { public static void main(String[] args) { final Solution96 s = new Solution96(); System.out.println(s.numTrees(1)); System.out.println(s.numTrees(2)); System.out.println(s.numTrees(3)); System.out.println(s.numTrees(4)); System.out.println(s.numTrees(5)); } public int numTrees(int n) { // å设n个èç¹åå¨äºåæåºæ çä¸ªæ°æ¯G(n)ï¼ä»¤f(i)为以iä¸ºæ ¹çäºåæç´¢æ ç个æ°ï¼å // G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n) // å½iä¸ºæ ¹èç¹æ¶ï¼å ¶å·¦åæ èç¹ä¸ªæ°ä¸ºi-1个ï¼å³åæ èç¹ä¸ºn-iï¼å // f(i) = G(i-1)*G(n-i) // 综åä¸¤ä¸ªå ¬å¼å¯ä»¥å¾å° å¡ç¹å °æ° å ¬å¼ // G(n) = G(0)*G(n-1)+G(1)*(n-2)+...+G(n-1)*G(0) // ä½è ï¼guanpengchn // 龿¥ï¼https://leetcode-cn.com/problems/unique-binary-search-trees/solution/hua-jie-suan-fa-96-bu-tong-de-er-cha-sou-suo-shu-b/ // æ¥æºï¼åæ£ï¼LeetCodeï¼ // è使å½ä½è ææãåä¸è½¬è½½è¯·èç³»ä½è è·å¾ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã int[] dp = new int[n + 1]; dp[0] = 1; dp[1] = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j <= i; j++) { dp[i] += dp[j - 1] * dp[i - j]; // ä» 1 å¼å§çå·¦å³åæ ä¹åçä¹ç§¯å èµ·æ¥ } } return dp[n]; } }