LeeCode - Unique Binary Search Trees

来源:http://www.cnblogs.com/shuaiwhu/archive/2016/01/05/5102387.html
-Advertisement-
Play Games

題目: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 B...


題目:

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

思路:

找規律

1. 沒有節點,BST (Binary Search Tree)為1個, 即空樹

2. 有一個節點,BST為1個,即自身為根節點

3. 有二個節點,BST為2個,1為root,左為空,右為2;2為root,左為1,右為空,其實就是dp[0]*dp[1] + dp[1]*dp[0]

      1                  2

        \               /

         2            1

4. 有三個節點

 1               1                  2                       3             3
  \                \               /    \                  /              / 
   3               2              1       3             2             1
 /                   \                                  /                 \
2                      3                               1                    2

可以推出dp[3] = dp[0]*dp[2] + dp[1]*dp[1] + dp[2]*dp[0]

package bst;

public class UniqueBinarySearchTrees {

    public int numTrees(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= n; ++i) {
            for (int j = 0; j < i; ++j) {
                dp[i] += dp[j] * dp[i - 1 - j];
            }
        }
        return dp[n];
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UniqueBinarySearchTrees u = new UniqueBinarySearchTrees();
        System.out.println(u.numTrees(3));
    }

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • @BeforeClass and @AfterClass@Before and @After出現次數在一個類中只可以出現一次在一個類中可以出現多次,即可以在多個方法的聲明前加上這兩個Annotaion標簽,執行順序不確定方法名限制方法名不做限制方法名不做限制運行次數在類中只運行一次在每個測試方法之前...
  • java中的圖片按比例縮放功能 1. 按固定長寬進行縮放 2. 按固定文件大小進行縮放
  • 1 python程式由包(package)、模塊(module)和函數組成。包是由一系列模塊組成的集合。模塊是處理某一類問題的函數和類的集合。2 包就是一個完成特定任務的工具箱。3 包必須含有一個__init__.py文件,它用於標識當前文件夾是一個包。4 python的程式是由一個個模塊組成的。模...
  • 作業要求:輸入用戶名和密碼認證成功之後彈出登錄歡迎信息密碼輸入錯誤三次鎖定賬戶思路:先畫流程圖,可以吧邏輯搞清楚。創建了user_file是用戶文件,lock_file是被鎖用戶文件主程式: 1 #_*_ coding:utf-8 _*_ 2 __author__ = 'zhangkai' 3 pr...
  • 本文轉載了c/c++常用庫,以及簡單介紹
  • resin配置websocket的超時時間不是通過程式代碼中直接調用WebSocketContext.setTimeout配置,因為這時候TcpPort已經創建完成,再配置超時時間不會對連接池裡的連接產生影響,所以需要設置啟動參數keepalive-timeout與socket-timeout,.....
  • 使用RVM安裝(RubyVersionManager能夠讓你輕鬆的安裝、管理ruby生產力環境,諸如不同版本的解釋器和gem.)0.升級一下源,執行:$ sudo apt-get update 1.rvm需要通過curl工具下載一段安裝腳本來進行安裝,同時下載完的這段腳本還需要用git從GitHub...
  • 看《VC++動態鏈接庫(DLL)編程深入淺出》時,裡面提到使用Visual C++的Depends工具可以查看動態鏈接庫中的導出介面。對於VC6.0,VC所帶的Depends軟體,在VC6安裝目錄下的tools文件夾裡面,可以直接運行。但是VS2010中沒有了Depends工具,如何查看DLL文件的...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...