File tree Expand file tree Collapse file tree 11 files changed +25
-49
lines changed
Expand file tree Collapse file tree 11 files changed +25
-49
lines changed Original file line number Diff line number Diff line change @@ -11,12 +11,12 @@ Write a function to find the longest common prefix string amongst an array of st
1111采用分治算法。
1212
1313将 LCP(S<sub >i</sub >...S<sub >j</sub >) 分解为两个子问题:
14- LCP(S<sub >i</sub >...S<sub >mid</sub >) 和
14+ LCP(S<sub >i</sub >...S<sub >mid</sub >) 和
1515LCP(S<sub >mid+1</sub >...S<sub >j</sub >),其中 mid = (i+j) / 2.
1616
1717根据这两个子问题的解,即可求出最长公共前缀。
1818
19- ## 实现代码
19+ ## 实现代码一
2020
2121``` java
2222class Solution {
@@ -54,7 +54,7 @@ class Solution {
5454先找出最短字符串的长度,最长公共前缀的长度不会超过最短字符串的长度。
5555采用二分查找的思路逐步确定最长公共前缀。
5656
57- ## [ 完整代码 ] [ src2 ]
57+ ## 实现代码二
5858
5959``` java
6060class Solution {
@@ -97,5 +97,3 @@ class Solution {
9797```
9898
9999[ title ] : https://leetcode.com/problems/longest-common-prefix
100-
101- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_014/Solution2.java
Original file line number Diff line number Diff line change @@ -13,7 +13,7 @@ Output: 1->1->2->3->4->4
1313
1414遍历两个链表,比较两个链表节点的大小,修改当前节点使其指向较小的那个节点。
1515
16- ## 实现代码
16+ ## 实现代码一
1717
1818``` java
1919/**
@@ -62,7 +62,7 @@ class Solution {
6262
6363比较两个链表头节点的大小,指向较小的节点,并且该节点的 next 节点可以通过递归的方法得到。
6464
65- ## [ 完整代码 ] [ src2 ]
65+ ## 实现代码二
6666
6767``` java
6868/**
@@ -90,5 +90,3 @@ class Solution {
9090```
9191
9292[ title ] : https://leetcode.com/problems/merge-two-sorted-lists
93-
94- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_021/Solution2.java
Original file line number Diff line number Diff line change @@ -36,7 +36,7 @@ Bonus points if you could solve it both recursively and iteratively.
3636* 如果左右孩子节点都不为空,但是值不相等,也不是对称的。
3737* 如果左右孩子节点都不为空,且值相等,如果左孩子节点的左子树与右孩子节点的右子树是对称的,并且左孩子节点的右子树与右孩子节点的左子树是对称的,则二叉树是对称的。
3838
39- ## 实现代码
39+ ## 实现代码一
4040
4141``` java
4242/**
@@ -67,7 +67,7 @@ class Solution {
6767
6868维护一个栈。从根节点开始,压入其左孩子节点和右孩子节点,然后依次弹出,比较其是否为空,如果都不为空并且值也相等,则依次压入左孩子的左孩子节点、右孩子的右孩子节点、左孩子的右孩子节点、右孩子的左孩子节点。
6969
70- ## [ 完整代码 ] [ src2 ]
70+ ## 实现代码二
7171
7272``` java
7373/**
@@ -105,5 +105,3 @@ class Solution {
105105```
106106
107107[ title ] : https://leetcode.com/problems/symmetric-tree
108-
109- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_101/Solution2.java
Original file line number Diff line number Diff line change @@ -31,7 +31,7 @@ return its level order traversal as:
3131* 如果节点不为空,把当前值加到列表,然后把节点的左右孩子节点压入队列尾部(如果孩子节点不为空)
3232* 如果节点为空,并且队列不为空,则添加当前列表
3333
34- ## 实现代码
34+ ## 实现代码一
3535
3636``` java
3737/**
@@ -81,7 +81,7 @@ class Solution {
8181在思路一的基础上进行优化。思路一通过往队列里添加空白节点作为每一层的分隔。
8282其实当前队列的长度就是该层节点的个数,通过 for 循环往队列里压入下一层节点。
8383
84- ## [ 完整代码 ] [ src2 ]
84+ ## 实现代码二
8585
8686``` java
8787/**
@@ -97,7 +97,7 @@ class Solution {
9797 public List<List<Integer > > levelOrder (TreeNode root ) {
9898 List<List<Integer > > list = new ArrayList<> ();
9999 if (root == null ) return list;
100-
100+
101101 Queue<TreeNode > queue = new LinkedList<TreeNode > ();
102102 queue. offer(root);
103103
@@ -130,7 +130,7 @@ class Solution {
130130每一层对应一个列表,取到当前层对应的那个列表,添加当前节点的值,
131131然后递归操作当前节点的左右孩子节点。
132132
133- ## [ 完整代码 ] [ src3 ]
133+ ## 实现代码三
134134
135135``` java
136136/**
@@ -163,6 +163,3 @@ class Solution {
163163```
164164
165165[ title ] : https://leetcode.com/problems/binary-tree-level-order-traversal
166-
167- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_102/Solution2.java
168- [ src3 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_102/Solution3.java
Original file line number Diff line number Diff line change @@ -23,7 +23,7 @@ return its depth = 3.
2323
2424递归。求二叉树 root 节点左子树和右子树的深度,其中较大的深度加 1 即为二叉树的深度。
2525
26- ## 实现代码
26+ ## 实现代码一
2727
2828``` java
2929/**
@@ -49,7 +49,7 @@ class Solution {
4949
5050递归。带上当前节点的深度。
5151
52- ## [ 完整代码 ] [ src2 ]
52+ ## 实现代码二
5353
5454``` java
5555class Solution {
@@ -67,5 +67,3 @@ class Solution {
6767```
6868
6969[ title ] : https://leetcode.com/problems/maximum-depth-of-binary-tree
70-
71- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_104/Solution2.java
Original file line number Diff line number Diff line change @@ -14,7 +14,7 @@ n & (n-1) 会把 n 最右边的 1 变为 0,其余位保持不变。
1414
1515循环下去,直到 n 变为 0 就可以知道 1 的个数了。
1616
17- ## 实现代码
17+ ## 实现代码一
1818
1919``` java
2020class Solution {
@@ -33,7 +33,7 @@ class Solution {
3333
3434n & 1 判断最后一位是否为 1,然后每次把 n 右移一位,由于是无符号整数,所以需要使用 >>>
3535
36- ## [ 完整代码 ] [ src2 ]
36+ ## 完整代码二
3737
3838``` java
3939public class Solution {
@@ -49,5 +49,3 @@ public class Solution {
4949```
5050
5151[ title ] : https://leetcode.com/problems/number-of-1-bits
52-
53- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_191/Solution2.java
Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ Given a list of non-negative integers representing the amount of money of each h
1010
1111假设 dp[ i] 表示抢劫前 i 个房子的最大收益,由于不能连着抢两个房子,所以 dp[ i] = Max(dp[ i-2] + nums[ i] , dp[ i-1] )
1212
13- ## 实现代码
13+ ## 实现代码一
1414
1515``` java
1616class Solution {
@@ -39,7 +39,7 @@ class Solution {
3939
4040由于当前最大收益只取决于前两个的最大收益,因此代码可进行优化。
4141
42- ## [ 完整代码 ] [ src2 ]
42+ ## 实现代码二
4343
4444``` java
4545class Solution {
@@ -59,5 +59,3 @@ class Solution {
5959```
6060
6161[ title ] : https://leetcode.com/problems/house-robber
62-
63- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_198/Solution2.java
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ A linked list can be reversed either iteratively or recursively. Could you imple
1212
1313使用两个变量分别记录当前节点的前一个节点和后一个节点,当遍历链表的时候,将当前节点的 next 节点修改为前一个节点。
1414
15- ## 实现代码
15+ ## 实现代码一
1616
1717``` java
1818/**
@@ -42,7 +42,7 @@ class Solution {
4242
4343使用递归。
4444
45- ## [ 完整代码 ] [ src2 ]
45+ ## 实现代码二
4646
4747``` java
4848class Solution {
@@ -59,5 +59,3 @@ class Solution {
5959```
6060
6161[ title ] : https://leetcode.com/problems/reverse-linked-list
62-
63- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_206/Solution2.java
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ Your algorithm should run in linear runtime complexity. Could you implement it u
2828
2929先求出总和,再减去数组所有元素的和,就可以得到缺失的那个数了。
3030
31- ## 实现代码
31+ ## 实现代码一
3232
3333``` java
3434class Solution {
@@ -54,7 +54,7 @@ class Solution {
5454由于数组的索引从 0 到 n-1,数组的元素从 0 到 n 各不相同且只缺失一个。
5555那么只需要初始化一个数 n,然后异或每一个索引和对应的元素,最后的结果就是缺失的那个数。
5656
57- ## [ 完整代码 ] [ src2 ]
57+ ## 实现代码二
5858
5959``` java
6060class Solution {
@@ -68,7 +68,4 @@ class Solution {
6868}
6969```
7070
71-
7271[ title ] : https://leetcode.com/problems/missing-number
73-
74- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_268/Solution2.java
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ Could you do it without using any loop / recursion?
1212
1313判断给定整数是否是 3 的某次方。最简单的方法是迭代,反复除以 3,看最终是不是等于 1。
1414
15- ## 实现代码
15+ ## 实现代码一
1616
1717``` java
1818class Solution {
@@ -30,7 +30,7 @@ class Solution {
3030
3131题目要求不用循环和递归,由于输入是一个 int,此范围内最大的 3 的次方数是 1162261467,因此只要看这个数能否被 n 整除即可。
3232
33- ## [ 完整代码 ] [ src2 ]
33+ ## 实现代码二
3434
3535``` java
3636class Solution {
@@ -41,5 +41,3 @@ class Solution {
4141```
4242
4343[ title ] : https://leetcode.com/problems/power-of-three
44-
45- [ src2 ] : https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_326/Solution2.java
You can’t perform that action at this time.
0 commit comments