Skip to content

Commit a6ad915

Browse files
committed
20190316
1 parent f6df74a commit a6ad915

13 files changed

+62
-9
lines changed

code/lc105.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static TreeNode recursion(int[] preorder, int[] inorder, int pre_index, i
3434
}
3535
tn.left = recursion(preorder, inorder, pre_index+1, start, in_index-1);
3636
tn.right = recursion(preorder, inorder, pre_index+in_index-start+1, in_index+1, end); //注意右孩子节点index参数
37-
return tn;
37+
return tn; //记住函数的返回值的设置,返回Node,递归的构造子树
3838
}
3939

4040
}

code/lc108.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package code;
22
/*
33
* 108. Convert Sorted Array to Binary Search Tree
4-
* 题意:将有序数组转换为二叉平衡树
4+
* 题意:将有序数组转换为二叉搜索树
55
* 难度:Easy
66
* 分类:Tree, Depth-first Search
77
* 思路:类似二分查找,每次把数组劈成两半

code/lc32.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
/*
66
* 32. Longest Valid Parentheses
7-
* 题意:最长有效子串
7+
* 题意:最长括号匹配
88
* 难度:Hard
99
* 分类:Dynamic Programming, String
1010
* 思路:两种常规方法,一是dp,每个位置记录以该位置结尾的最长长度。另一种是用栈,把位置索引入栈。

code/lc35.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package code;
2+
/*
3+
* 35. Search Insert Position
4+
* 题意:找到数组中 target 插入的位置
5+
* 难度:
6+
* 分类:Array, Binary Search
7+
* 思路:二分查找
8+
* Tips:
9+
*/
10+
public class lc35 {
11+
public int searchInsert(int[] nums, int target) {
12+
int left = 0, right = nums.length-1;
13+
while(left<=right){
14+
int mid = (left + right)/2;
15+
if(nums[mid]==target) return mid;
16+
else if(nums[mid]<target) left = mid+1;
17+
else right = mid-1;
18+
}
19+
return left;
20+
}
21+
}

code/lc43.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package code;
2+
/*
3+
* 43. Multiply Strings
4+
* 题意:大数相乘
5+
* 难度:Medium
6+
* 分类:Math, String
7+
* 思路:每个位置上的数字都相乘,把位置排好,加起来
8+
* https://leetcode.com/problems/multiply-strings/discuss/17605/Easiest-JAVA-Solution-with-Graph-Explanation
9+
* Tips:挺难的,好多细节
10+
*/
11+
public class lc43 {
12+
public String multiply(String num1, String num2) {
13+
int[] res = new int[num1.length()+num2.length()]; //最高位 index 是 0
14+
for (int i = num1.length()-1; i>=0 ; i--) { //从后往前,解决重复进位
15+
for (int j = num2.length()-1; j>=0 ; j--) {
16+
int a = i+j;
17+
int b = i+j+1;
18+
int mul = (num1.charAt(i) -'0') * (num2.charAt(j) - '0');
19+
mul += res[b]; //解决进位
20+
res[b] = mul%10; //右边的直接=,因为上一步已经+了
21+
res[a] += mul/10; //左边+=
22+
}
23+
}
24+
StringBuilder sb = new StringBuilder();
25+
for(int i:res) if(!(sb.length()==0&&i==0)) sb.append(i);
26+
return sb.length() == 0 ? "0" : sb.toString();
27+
}
28+
}

code/lc56.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public List<Interval> merge(List<Interval> intervals) {
4343
}
4444
Arrays.sort(starts);
4545
Arrays.sort(ends);
46-
for (int i = 1; i < starts.length ; i++) {
46+
for (int i = 1; i < starts.length ; i++) { //注意下这里的操作
4747
if(starts[i]<=ends[i-1]){
4848
starts[i] = starts[i-1];
4949
}else{

code/lc63.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
* 题意:路径数
66
* 难度:Medium
77
* 分类:Array, Dynamic Programming
8-
* 思路:和lc64, lc62思路一样, arr存储的内容由路径数换成了和
9-
* Tips:可以用一位数组减小空间复杂度
8+
* 思路:和lc64, lc62思路一样
9+
* Tips:可以用一维数组减小空间复杂度
1010
*/
1111
public class lc63 {
1212
public static void main(String[] args) {

code/lc73.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* 难度:Medium
66
* 分类:Array
77
* 思路:用第一行和第一列作为标志位。注意赋值的时候从后往前,防止标志位被改变
8+
* 两遍循环,先记录,再置位
89
* Tips:注意赋值的顺序,防止标志位被改变
910
* 思路是很简单,但有许多细节
1011
*/

code/lc76.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* 思路:两个指针,移动右指针使得满足条件,移动左指针缩短距离。用hashmap存储进行判断是否满足条件。
88
* Tips:很难的题,思路记一下。
99
* https://leetcode.com/problems/minimum-window-substring/discuss/26808/here-is-a-10-line-template-that-can-solve-most-substring-problems
10+
* 和lc3也坐下对比
1011
*/
1112
import java.util.HashMap;
1213

code/lc79.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* 分类:Array, Backtracking
77
* 思路:回溯法
88
* Tips:访问过的格子要标记,不能重复访问。回溯法注意回来的时候要重置标志位。向下找的时候直接找4个方向的,回来的时候不用再找了,只需重置标志位。
9+
* 不用mem,因为 ABC ABAD 这种情况,不能仅仅从A一个字符就断定为不为true
910
*/
1011
public class lc79 {
1112
public static void main(String[] args) {

code/lc84.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
* 分类:Array, Stack
1010
* 思路:两种方法:1.用dp找到边界,再遍历一遍; 2.用栈,栈内存索引,保证栈内索引对应的高度是递增的,若减了即找到了右边界,出栈开始计算。因为栈内是递增的,左边界就是上个栈内的元素。若栈为空,左边界就是-1。
1111
* Tips:和lc42做比较,都可以用栈或者dp来做. 很难,栈的操作很难想到.
12+
* 和lc42 dp作比较 和lc32栈做比较
13+
* lc85
1214
*
1315
*/
1416
public class lc84 {

code/lc94.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package code;
22
/*
33
* 94. Binary Tree Inorder Traversal
4-
* 题意:二叉树中序遍历
4+
* 题意:
55
* 难度:Medium
66
* 分类:HashTable, Stack, Tree
7-
* 思路:左节点依次入栈
7+
* 思路:左节点依次入栈二叉树中序遍历
88
* Tips:和lc144前序,lc145后序一起看
99
*/
1010
import java.util.ArrayList;

code/lc98.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,4 @@ public static boolean isValidBST2(TreeNode root) {
5151
}
5252
return true;
5353
}
54-
5554
}

0 commit comments

Comments
 (0)