File tree Expand file tree Collapse file tree 3 files changed +82
-0
lines changed Expand file tree Collapse file tree 3 files changed +82
-0
lines changed Original file line number Diff line number Diff line change
1
+ package code ;
2
+
3
+ import java .util .LinkedList ;
4
+ import java .util .List ;
5
+
6
+ /*
7
+ * 95. Unique Binary Search Trees II
8
+ * 题意:1~n可以组成的二叉搜索树
9
+ * 难度:Medium
10
+ * 分类:Dynamic Programming, Tree
11
+ * 思路:96只要求计算数量,dp就行,当要把所有情况都输出的时候,往往递归更方便一些
12
+ * 返回的的是跟的List,不用把整颗数的节点都复制了,所以下层的叶子节点是被多个父节点指向
13
+ * 暴力,子情况被计算了多遍,为什么不用mem呢???
14
+ * Tips:lc96
15
+ */
16
+ public class lc95 {
17
+ public class TreeNode {
18
+ int val ;
19
+ TreeNode left ;
20
+ TreeNode right ;
21
+ TreeNode (int x ) { val = x ; }
22
+ }
23
+ public List <TreeNode > generateTrees (int n ) {
24
+ if (n ==0 ) return new LinkedList ();
25
+ return generateSubtrees (1 , n );
26
+ }
27
+
28
+ private List <TreeNode > generateSubtrees (int s , int e ) {
29
+ List <TreeNode > res = new LinkedList <TreeNode >();
30
+ if (s > e ) {
31
+ res .add (null ); // empty tree
32
+ return res ;
33
+ }
34
+
35
+ for (int i = s ; i <= e ; ++i ) {
36
+ List <TreeNode > leftSubtrees = generateSubtrees (s , i - 1 );
37
+ List <TreeNode > rightSubtrees = generateSubtrees (i + 1 , e );
38
+
39
+ for (TreeNode left : leftSubtrees ) {
40
+ for (TreeNode right : rightSubtrees ) {
41
+ TreeNode root = new TreeNode (i );
42
+ root .left = left ;
43
+ root .right = right ;
44
+ res .add (root );
45
+ }
46
+ }
47
+ }
48
+ return res ;
49
+ }
50
+ }
Original file line number Diff line number Diff line change
1
+ package code ;
2
+ /*
3
+ * 983. Minimum Cost For Tickets
4
+ * 题意:两个数组,days代表那一天得去玩,costs表示玩1天,2天,7天的花费,问怎么玩可以把days覆盖,并且花费最少
5
+ * 难度:Medium
6
+ * 分类:Dynamic Programming
7
+ * 思路:猛一看题,感觉很难
8
+ * 想了以后,会发现就是典型的数组dp,难的地方主要在于数组不代表每天,如何把days中的天全部覆盖到
9
+ * 方法是将days转换为一个365长的arr,代表每一天
10
+ * 如果这一天不在days中,则 dp[i] = dp[i-1], 否则 dp[i] = min(d p[i-1]+cost , dp[i-2]+cost ,dp[i-7]+cost )
11
+ * Tips:
12
+ */
13
+ public class lc983 {
14
+ public int mincostTickets (int [] days , int [] costs ) {
15
+ int [] dp = new int [366 ]; //366,把0空出来
16
+ int days_cur = 0 ;
17
+ for (int i = 1 ; i < dp .length ; i ++) {
18
+ if (i ==days [days_cur ]) { //在days中
19
+ int minCost = dp [Math .max (0 , i -1 )]+costs [0 ];
20
+ minCost = Math .min ( minCost , dp [Math .max (0 , i -7 )]+costs [1 ] );
21
+ minCost = Math .min ( minCost , dp [Math .max (0 , i -30 )]+costs [2 ] );
22
+ dp [i ] = minCost ;
23
+ if (days_cur <days .length -1 ) days_cur ++; //防止越界
24
+ }else {
25
+ dp [i ] = dp [i -1 ];
26
+ }
27
+ }
28
+ return dp [dp .length -1 ];
29
+ }
30
+ }
Original file line number Diff line number Diff line change @@ -82,6 +82,7 @@ LeetCode 指南
82
82
| 088 [ Java] ( ./code/lc88.java )
83
83
| 091 [ Java] ( ./code/lc91.java )
84
84
| 094 [ Java] ( ./code/lc94.java )
85
+ | 095 [ Java] ( ./code/lc95.java )
85
86
| 096 [ Java] ( ./code/lc96.java )
86
87
| 098 [ Java] ( ./code/lc98.java )
87
88
| 101 [ Java] ( ./code/lc101.java )
@@ -202,3 +203,4 @@ LeetCode 指南
202
203
| 746 [ Java] ( ./code/lc746.java )
203
204
| 771 [ Java] ( ./code/lc771.java )
204
205
| 877 [ Java] ( ./code/lc877.java )
206
+ | 983 [ Java] ( ./code/lc983.java )
You can’t perform that action at this time.
0 commit comments