Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
102446bd
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
大约 1 年 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
102446bd
编写于
6月 28, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add scala 96 *
上级
cac7c48e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
121 addition
and
0 deletion
+121
-0
scala-leetcode/README.md
scala-leetcode/README.md
+1
-0
scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_96.scala
...ode/src/main/scala/io/github/dreamylost/Leetcode_96.scala
+120
-0
未找到文件。
scala-leetcode/README.md
浏览文件 @
102446bd
...
...
@@ -48,6 +48,7 @@ Leetcode Scala 实现
*
[
BiNode @unchecked
](
./src/main/scala/io/github/dreamylost/Leetcode_Interview_17_12.scala
)
*
[
二叉树的中序遍历 非递归
](
./src/main/scala/io/github/dreamylost/Leetcode_94.scala
)
*
[
不同的二叉搜索树 II
](
./src/main/scala/io/github/dreamylost/Leetcode_95.scala
)
*
[
不同的二叉搜索树
](
./src/main/scala/io/github/dreamylost/Leetcode_96.scala
)
## 链表
...
...
scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_96.scala
0 → 100644
浏览文件 @
102446bd
package
io.github.dreamylost
import
scala.collection.immutable.HashMap
/**
* 96. 不同的二叉搜索树
*
* 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
*
* @author 梦境迷离 dreamylost
* @since 2020-06-28
* @version v1.0
*/
object
Leetcode_96
extends
App
{
val
ret
=
numTrees
(
3
)
val
ret2
=
numTrees2
(
3
)
val
ret3
=
numTrees3
(
3
)
val
ret4
=
numTrees4
(
3
)
println
(
ret
)
println
(
ret2
)
println
(
ret3
)
println
(
ret4
)
/**
* 不能直接使用95的代码,会超时
* 利用递推公式求解
*
* fn=f(1)+f(2)+f(3)+...fn(n)
* 对任意的i,i的左子树有i-1个节点,i的右子树有n-i个节点
* f(i)=f(i-1)*f(n-i)
* 代入到fn中,得f(n) = f(0)*f(n-1)+f(1)f(n-2)+f(2)f(n-3)+...+f(n-1)f(0)
*
* 4600 ms,25.00%(直接用公式太慢了)
* 49.2 MB,100.00%
*
* @param n
* @return
*/
def
numTrees
(
n
:
Int
)
:
Int
=
{
//根据地推公式直接递归
var
ret
=
0
if
(
n
==
1
||
n
==
0
)
1
else
{
for
(
i
<-
1
to
n
)
{
ret
+=
numTrees
(
i
-
1
)
*
numTrees
(
n
-
i
)
}
ret
}
}
/**
* 动态规划
* 460 ms,50.00%
* 49 MB,100.00%
*
* @param n
* @return
*/
def
numTrees2
(
n
:
Int
)
:
Int
=
{
if
(
n
==
1
||
n
==
0
)
return
1
val
ret
=
new
Array
[
Int
](
n
+
1
)
ret
(
0
)
=
1
for
(
i
<-
1
to
n
)
{
for
(
j
<-
1
to
i
)
{
ret
.
update
(
i
,
ret
(
j
-
1
)
*
ret
(
i
-
j
)
+
ret
(
i
))
}
}
ret
(
n
)
}
/**
* 与95类似,二叉搜索树的种类只与个数有关,缓存个数
* 472 ms,50.00%
* 49.1 MB,100.00%
*
* @param n
* @return
*/
def
numTrees3
(
n
:
Int
)
:
Int
=
{
var
map
=
HashMap
.
empty
[
Int
,
Int
]
def
buildSearchTree
(
left
:
Int
,
right
:
Int
)
:
Int
=
{
var
sum
=
0
if
(
map
.
contains
(
right
-
left
))
{
return
map
(
right
-
left
)
}
if
(
left
>
right
)
{
1
}
else
{
(
left
to
right
).
foreach
{
i
=>
val
lCount
=
buildSearchTree
(
left
,
i
-
1
)
val
rCount
=
buildSearchTree
(
i
+
1
,
right
)
sum
+=
lCount
*
rCount
}
map
=
map
++
Map
(
right
-
left
->
sum
)
sum
}
}
if
(
n
<
1
)
0
else
buildSearchTree
(
1
,
n
)
}
/**
* 上面的递推公式 = 卡特兰数 https://baike.baidu.com/item/catalan/7605685?fr=aladdin
*
* 468 ms,50.00%
* 48.8 MB,100.00%
*
* @param n
* @return
*/
def
numTrees4
(
n
:
Int
)
:
Int
=
{
var
ret
=
1L
for
(
i
<-
0
until
n
)
{
ret
=
ret
*
2
*
(
2
*
i
+
1
)
/
(
i
+
2
)
}
ret
.
toInt
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录