简述各题
283 Move Zeros: 这题我也是醉了,竟然想了半天,用插入排序就好,真是太久没刷题了么。
341 Flatten Nested List Iterator: 主要是iterator的用法,和要看清nestedInteger的描述。
43 Multiply Strings: 算法精妙,注意pos[p1] += sum / 10;还有熟悉StringBuilder。
206 Reverse Linked List: 注意一下逻辑即可 很简单。
215 Kth Largest Element in an Array: 快速排序,注意各种边界条件。
91 Decode Ways: dp公式,两个两个推,注意substring含前不含后,dp[n + 1], Integer.valueOf。
236 Lowest Common Ancestor of a Binary Tree: 左右都有就是root,光左/右有就左/右,注意返回root的情况。
139 Word Break: 注意dp公式: result[i] || (result[j] && wordDict.contains(sub))。
20 Valid Parentheses: 注意最后的 if(stack.isEmpty()),最后要判断栈是不是空的。
173 Binary Search Tree Iterator: 注意stack怎么加。先左到底,然后加根,然后再右边。
15 3Sum: 注意当一定是先比较nums[i]和nums[i-1],如果是比较i+1和i的话会漏掉结果。
75 Sort Colors: 注意只扫一遍并且in-place,所以用while,是blue的时候i不变。
334 Increasing Triplet Subsequence: min和second,更新min,else if,更新second,如不更新,返回true。<=!
377 Combination Sum IV: 注意递推公式,应该很简单的为什么一时就忘了。。result[i] += result[i - num]
146 LRU Cache: if (get(key) != -1),这里不能是判断哈希表里是否有,因为可能曾经存过,被移除了。
38 Count and Say: 注意prev和cur实时的状态,注意循环的起始点都是1。
209 Minimum Size Subarray Sum: 注意i - j+ 1,注意各种算法的具体实现。nlogn未实现。
325 Maximum Size Subarray Sum Equals k: put(0, -1), 巧妙应用prefix,求max,只保留第一个prefix。
146 LRU Cache: 注意各种细节,get中要先remove current,set中要先判断capacity,然后map中加入cur。
1 Two Sum: 只做了hashmap版本,比较简单,two pointers的版本注意各种复制,要返回原来的indice。
15 3Sum: 注意要查重,去掉重复的数字,每次都要去。可以再做一次。
98 Validate Binary Search Tree: recursive版本注意min max,stack版本注意怎么中序遍历,注意p和cur,再做!
17 Letter Combinations of a Phone Number: BFS注意cur和i, DFS sb 注意backtracking。
String cur = mapping[Character.getNumericValue(digits.charAt(depth))];
314 Binary Tree Vertical Order Traversal: TreeMap方法没做。记得加min和max,两个queue,一个hashmap。
50 Pow(x, n): 注意Integer.MIN_VALUE的情况,以及n<0的情况。
69 Sqrt(x): 还没做。。。
49 Group Anagrams: String.valueOf(c), return的时候新建。
274 H-Index: 注意递推方法,j = length - 1 - i。
275 H-Index II: 二分法,注意边界判断。
23 Merge k Sorted Lists: 注意往结果加点要new ListNode(temp.val),这样没有next。compare要public int。
26 Remove Duplicates from Sorted Array: 简单,注意限制i < nums.length就行。
207 Course Schedule: 拓扑排序,注意去重。 if(graph[pre][post] == 0) indegree[post]++。
208 Course Schedule: 和207几乎一样,用不同的做法做,记得最后循环的是i < prerequisite.length。
269 Alien Dictionary: 注意if(j+1 <= word1.length()-1 && j+1 > word2.length()-1) return "";!
71 Simplify Path: 用stack。注意实时要判断stack是否是空的,以及最后要去掉最后一个“/"。
261 Graph Valid Tree: UF, 注意要加一步判断是否是cycle。
78 Subsets: DFS方法注意循环时i从depth开始,进去是i + 1; 大神方法注意各种new。
79 SubsetsII: 和上题几乎一样,加个HashSet就可以。如果不加set,排序后就先判断后一个数和前一个是否一样。
286 Walls and Gates: d的设置很巧妙,必须用deque,后面加,前面出。room[m][n] = room[i][j] + 1。dfs没看。
79 Word Search: 注意visited[][]要backtracking置零。
127 Word Ladder: 注意要用.equals方法,注意如果wordList里不含新词则continue,set里有新词也continue。
221 Maximal Square: 注意dp中要判断当前格子是不是1,最后返回的是max * max。
85 Maximal Rectangle: 注意,用stack,pop时要看栈是不是空的,计算时也要注意加减1。
128 Longest Consecutive Sequence: set没有cur直接continue,最后算res=up-down+1。而且up和down要=cur。
161 One Edit Distance: 最后要再判断两个字符串的长度是否差1,因为如果完全相同,或前面一样但长度差不止1都不行。
265 Paint House II: 注意pre1,pre2,min1,min2的取值,注意初始化,注意判断条件,if,else if。再做!!
252 Meeting Rooms: 注意先排序,然后重写方法。
253 Meeting Rooms II: 要用heap做,不要想得太简单!可能第三个第四个会议开始了第一个还没结束!再做!
208 Implement Trie (Prefix Tree): 注意一定要copy,search和insert里一定要注意isKey。
133 Clone Graph: 注意map.get(n).neighbors.add(map.get(neighbor)),邻居也一定要加新的!
117 Populating Next Right Pointers in Each Node II: 注意new levelHead和needle的用法。两层循环。
25 Reverse Nodes in k-Group: 注意 while(true) 和 head = prev.next。
234 Palindrome Linked List: 先找中点,然后翻转后半部分比较。注意一个ListNode的情况。
278 First Bad Version:比较简单没有具体做,就是二分法。注意最后要做一次判断。可以再做。
88 Merge Sorted Array:简单的插入排序。
26 Remove Duplicates from Sorted Array: 简单,也是插入,就是注意要放进去新的数组。
44 Wildcard Matching:注意细节,第一层是i循环;*可以为空所以遇到只加j;第二个else里不用判断j,j可能=length。
56 Merge Intervals: 比较简单,注意先排序,要重写compare,然后比较两个interval的end即可。
57 Insert Interval: 加isInserted的flag,注意newInt在最后和new.start>l.start&&new.end>l.end的情况。
211 Add and Search Word - Data structure design: 注意dfs的用法,要自己新建root。注意.的情况。
273 Integer to English Words: 注意belowTwenty要返回[num - 10], belowHundred要加“”,最后要trim。
10 Regular Expression Matching: 1.注意初始化,和空串比;2.注意最后三种情况。再做!!
311 Sparse Matrix Multiplication: 仔细分析矩阵相乘的模式,三层循环,注意i,j,k。
282 Expression Add Operators: 挺难的,注意long和各种情况,需要prevNum和curNum。
301 Remove Invalid Parentheses:注意各种情况,max,maxcount,count,backtracting。
28 Implement strStr():注意循环里没有判断条件,不然会缺乏return。或者用while。
121 Best Time to Buy and Sell Stock: 注意看清是哪一题,这题很简单,设min即可。
71 Simplify Path: 注意是'.'的情况,经常要判断stack是不是空的。最后如果stack不空要去掉最后一个/。
76 Minimum Window Substring: 注意细节,循环的位置,要设的变量。
33 Search in Rotated Sorted Array: 两条线,分情况分析,比较清晰的binary search。
218 The Skyline Problem: 做法是先建立height,再建最大堆,再遇到左边offer,右边pop,更新keypoint。最大堆!
67 Add Binary: 注意最后还要加上carry位。注意reverse啊sb啊什么的用法。
257 Binary Tree Paths: 注意一下递归,不能是node != null的情况哟~
285 Inorder Successor in BST: 再多记几遍inorder traverse的做法,注意一定要改变cur!看recursive怎么做。