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 指南
8282| 088 [ Java] ( ./code/lc88.java )
8383| 091 [ Java] ( ./code/lc91.java )
8484| 094 [ Java] ( ./code/lc94.java )
85+ | 095 [ Java] ( ./code/lc95.java )
8586| 096 [ Java] ( ./code/lc96.java )
8687| 098 [ Java] ( ./code/lc98.java )
8788| 101 [ Java] ( ./code/lc101.java )
@@ -202,3 +203,4 @@ LeetCode 指南
202203| 746 [ Java] ( ./code/lc746.java )
203204| 771 [ Java] ( ./code/lc771.java )
204205| 877 [ Java] ( ./code/lc877.java )
206+ | 983 [ Java] ( ./code/lc983.java )
You can’t perform that action at this time.
0 commit comments