Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Damon-Da
leetcode
提交
4c9ac2a5
L
leetcode
项目概览
Damon-Da
/
leetcode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
leetcode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4c9ac2a5
编写于
3月 09, 2019
作者:
L
liu13
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
20190309
上级
e8d1b352
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
82 addition
and
0 deletion
+82
-0
code/lc95.java
code/lc95.java
+50
-0
code/lc983.java
code/lc983.java
+30
-0
readme.md
readme.md
+2
-0
未找到文件。
code/lc95.java
0 → 100644
浏览文件 @
4c9ac2a5
package
code
;
import
java.util.LinkedList
;
import
java.util.List
;
/*
* 95. Unique Binary Search Trees II
* 题意:1~n可以组成的二叉搜索树
* 难度:Medium
* 分类:Dynamic Programming, Tree
* 思路:96只要求计算数量,dp就行,当要把所有情况都输出的时候,往往递归更方便一些
* 返回的的是跟的List,不用把整颗数的节点都复制了,所以下层的叶子节点是被多个父节点指向
* 暴力,子情况被计算了多遍,为什么不用mem呢???
* Tips:lc96
*/
public
class
lc95
{
public
class
TreeNode
{
int
val
;
TreeNode
left
;
TreeNode
right
;
TreeNode
(
int
x
)
{
val
=
x
;
}
}
public
List
<
TreeNode
>
generateTrees
(
int
n
)
{
if
(
n
==
0
)
return
new
LinkedList
();
return
generateSubtrees
(
1
,
n
);
}
private
List
<
TreeNode
>
generateSubtrees
(
int
s
,
int
e
)
{
List
<
TreeNode
>
res
=
new
LinkedList
<
TreeNode
>();
if
(
s
>
e
)
{
res
.
add
(
null
);
// empty tree
return
res
;
}
for
(
int
i
=
s
;
i
<=
e
;
++
i
)
{
List
<
TreeNode
>
leftSubtrees
=
generateSubtrees
(
s
,
i
-
1
);
List
<
TreeNode
>
rightSubtrees
=
generateSubtrees
(
i
+
1
,
e
);
for
(
TreeNode
left
:
leftSubtrees
)
{
for
(
TreeNode
right
:
rightSubtrees
)
{
TreeNode
root
=
new
TreeNode
(
i
);
root
.
left
=
left
;
root
.
right
=
right
;
res
.
add
(
root
);
}
}
}
return
res
;
}
}
code/lc983.java
0 → 100644
浏览文件 @
4c9ac2a5
package
code
;
/*
* 983. Minimum Cost For Tickets
* 题意:两个数组,days代表那一天得去玩,costs表示玩1天,2天,7天的花费,问怎么玩可以把days覆盖,并且花费最少
* 难度:Medium
* 分类:Dynamic Programming
* 思路:猛一看题,感觉很难
* 想了以后,会发现就是典型的数组dp,难的地方主要在于数组不代表每天,如何把days中的天全部覆盖到
* 方法是将days转换为一个365长的arr,代表每一天
* 如果这一天不在days中,则 dp[i] = dp[i-1], 否则 dp[i] = min(d p[i-1]+cost , dp[i-2]+cost ,dp[i-7]+cost )
* Tips:
*/
public
class
lc983
{
public
int
mincostTickets
(
int
[]
days
,
int
[]
costs
)
{
int
[]
dp
=
new
int
[
366
];
//366,把0空出来
int
days_cur
=
0
;
for
(
int
i
=
1
;
i
<
dp
.
length
;
i
++)
{
if
(
i
==
days
[
days_cur
])
{
//在days中
int
minCost
=
dp
[
Math
.
max
(
0
,
i
-
1
)]+
costs
[
0
];
minCost
=
Math
.
min
(
minCost
,
dp
[
Math
.
max
(
0
,
i
-
7
)]+
costs
[
1
]
);
minCost
=
Math
.
min
(
minCost
,
dp
[
Math
.
max
(
0
,
i
-
30
)]+
costs
[
2
]
);
dp
[
i
]
=
minCost
;
if
(
days_cur
<
days
.
length
-
1
)
days_cur
++;
//防止越界
}
else
{
dp
[
i
]
=
dp
[
i
-
1
];
}
}
return
dp
[
dp
.
length
-
1
];
}
}
readme.md
浏览文件 @
4c9ac2a5
...
...
@@ -82,6 +82,7 @@ LeetCode 指南
| 088
[
Java
](
./code/lc88.java
)
| 091
[
Java
](
./code/lc91.java
)
| 094
[
Java
](
./code/lc94.java
)
| 095
[
Java
](
./code/lc95.java
)
| 096
[
Java
](
./code/lc96.java
)
| 098
[
Java
](
./code/lc98.java
)
| 101
[
Java
](
./code/lc101.java
)
...
...
@@ -202,3 +203,4 @@ LeetCode 指南
| 746
[
Java
](
./code/lc746.java
)
| 771
[
Java
](
./code/lc771.java
)
| 877
[
Java
](
./code/lc877.java
)
| 983
[
Java
](
./code/lc983.java
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录