#Leetcode-In-Java
代码并不全是本人写的,有的参考了网络上其他前辈的想法,但都能在OJ上AC。
###索引
1 . Two-Sum
要点:
- 利用java中Array对象的sort方法排序,使得整个数组呈升序状态
- 再利用两段取点相加的sum与target比较
- 若大于target,则后结点前移,sum变小
- 若小于target,则前结点后移,sum变大
逐个试,向中间逼近,直到找出符合条件的两个数
2 . Reverse-Linked-List-II
要点:
- 确定边界条件,定位到起点
- 再利用头插法对指定段的链表逆序
链表逆序之头插法,关键代码(牢记):
pre.next = cur.next;
cur.next = head.next;
head.next = cur;
cur = pre.next;
3 . Add-TwoNum
要点:
- 分别考虑相加的两个链表长度相同和不同的情况
- 代码块的复用,避免冗长
4 . Zigzag-Conversion
要点:
图解 0 6 0 8
↓ ↑ ↓ ↓ ↑ ↓
1 5 7 1 7 9
↓ ↑ ↓ ↓ ↑ ↓
2 4 8 2 6 10
↓ ↑ ↓ ↓ ↑ ↓
3 9 3 5 11
row=3 ↓ ↑ ↓
row=4 4 12
- 两种方法:
1. 用一个String[]存储每一行,最后将所有的String拼接就得到所求
2. 找数学规律
- 首尾只有两个数,相隔row*2-2
- 非首尾三个数,中间的相隔row*2-2-i*2+j
- 第一种比较容易想到,且效率高
5 . Reverse-Integer
要点:
- 注意int溢出时的处理方法,可用long来暂时代替,与Integer.MAX_VALUE或Integer.MIN_VALUE比较