IT技術(shù)小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
          For example,
          Given n = 3, there are a total of 5 unique BST's.
             1          3     3      2      1
              \        /      /       / \       \
               3     2     1       1   3       2
              /     /        \                      \
             2    1          2                     3
          本題使用一維線性規(guī)劃解決。
          如果n等于0時,結(jié)果為0;
          如果n等于1時,只有一個節(jié)點,結(jié)果為1;
          如果n等于2時,根節(jié)點有兩種選擇,結(jié)果為2;
          如果n大于3時,根節(jié)點有n種選擇,確定根節(jié)點后分別計算左右子樹的可能情況,然后相乘就是當前根節(jié)點下所有的變形種類,之后在求和即可。算法實現(xiàn)如下:
           1 public class UniqueBinarySearchTrees {
           2     public int numTrees(int n) {
           3         if (n == 1)
           4             return 1;
           5         if (n == 2)
           6             return 2;
           7         int[] record = new int[n + 1];
           8         record[0] = 1;
           9         record[1] = 1;
          10         record[2] = 2;
          11         for (int i = 3; i <= n; i++) {
          12             int tmp = 0;
          13             for (int k = 0; k < i; k++) {
          14                 tmp += (record[k] * record[i - k - 1]);
          15             }
          16             record[i] = tmp;
          17         }
          18         return record[n];
          19     }
          20 }
          posted on 2013-12-20 11:58 Meng Lee 閱讀(4311) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 大宁县| 东丰县| 申扎县| 上饶市| 徐水县| 九龙城区| 屏山县| 乐亭县| 扎兰屯市| 遵义县| 北票市| 泰和县| 阳谷县| 青川县| 恩平市| 达州市| 丹寨县| 遂宁市| 郓城县| 淮安市| 乌拉特后旗| 新龙县| 潍坊市| 泽州县| 苗栗市| 绵竹市| 合肥市| 临洮县| 博白县| 林口县| 东源县| 克山县| 灵山县| 天祝| 苍山县| 锦屏县| 江北区| 台南市| 江城| 大化| 普宁市|