96. Unique Binary Search Trees
2016-05-04 05:28
489 查看
1. 正常的解法:动规
从理解上说,
n = 1,有1种可能
n = 2, 有2种可能,a.左子树0节点,右子树1个 b.左子树1个节点,右子树零个
n = 3,有三个节点,这个数的组成可能是,选任意一个作为根节点,然后a.左子树有0个节点,右子树2个 b.左子树一个节点,右子树一个节点 c.左子树2个节点,右子树0个。所以结果是res[0]*res[2] + res[1] * res[1] + res[2] * res[0] = 5
n = 4, 同理,res[4] = res[0] * res[3] + res[1] * res[2] + res[2] * res[1] + res[3] * res[0] = 14
....
所以
2. 数学解法:卡特兰数
其实我觉得这个没必要这么做……毕竟不是数学专业,不是刷题哪知道这个公式= =
公式是:
就不写了
从理解上说,
n = 1,有1种可能
n = 2, 有2种可能,a.左子树0节点,右子树1个 b.左子树1个节点,右子树零个
n = 3,有三个节点,这个数的组成可能是,选任意一个作为根节点,然后a.左子树有0个节点,右子树2个 b.左子树一个节点,右子树一个节点 c.左子树2个节点,右子树0个。所以结果是res[0]*res[2] + res[1] * res[1] + res[2] * res[0] = 5
n = 4, 同理,res[4] = res[0] * res[3] + res[1] * res[2] + res[2] * res[1] + res[3] * res[0] = 14
....
所以
public int numTrees(int n) { if(n <= 0) { return 0; } int[] res = new int[n+1]; res[0] = 1; res[1] = 1; for(int i = 2; i <= n; i++) { for(int j = 0; j < i; j++) { res[i] += res[j] * res[i-1-j]; } } return res ; }
2. 数学解法:卡特兰数
其实我觉得这个没必要这么做……毕竟不是数学专业,不是刷题哪知道这个公式= =
公式是:
就不写了
相关文章推荐
- day4.08总结_UI控件
- mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
- UITableView 零散知识点总结
- Java基础学习之--Break/Continue/Return
- MIUI重度用户:超三成玩机直逼睡眠时长
- MySQL_Table_Join_Query
- array_unique 二维数组去重 二维数组排序 去空白
- iOS中的UIDatePicker (日期滚轮)
- 队列的使用
- UE4:Localization(本地化:中文)
- LeetCode 347. Top K Frequent Elements
- 验证StringBuilder是非线程安全的Java小程序
- Android中Build Target,minSdkVersitarget,targetSdkversion概念
- Html中value和name属性的作用及其使用介绍
- Could not calculate build plan
- 自定义UIButton
- SPOJ GSS1 Can you answer these queries I
- SPOJ GSS1 Can you answer these queries I
- UISenior —— 数据存储之沙盒路径
- ionic生成apk使用build命令下载gradle-2.2.1-all.zip卡,解决方案