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 閱讀(4318) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 聊城市| 托克托县| 灵石县| 华亭县| 杭锦后旗| 沁源县| 星座| 北碚区| 米林县| 高唐县| 白河县| 诸暨市| 曲水县| 崇阳县| 泾川县| 壶关县| 象山县| 宜春市| 虞城县| 新乡市| 九寨沟县| 互助| 信阳市| 武夷山市| 宿松县| 凌源市| 泾川县| 自贡市| 南昌市| 涞源县| 得荣县| 邹城市| 芜湖县| 民勤县| 开阳县| 乡宁县| 民权县| 措美县| 房山区| 余江县| 甘洛县|