Skip to content

Commit cd26bc9

Browse files
committed
summary100
1 parent b51204b commit cd26bc9

4 files changed

+104
-2
lines changed

SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
* [98. Validate Binary Search Tree](leetCode-98-Validate-Binary-Search-Tree.md)
102102
* [99. Recover Binary Search Tree](leetcode-99-Recover-Binary-Search-Tree.md)
103103
* [100. Same Tree](leetcode-100-Same-Tree.md)
104+
* [leetcode 100 斩!回顾](leetcode100斩回顾.md)
104105
* [101 题到 102 题](leetcode-101-200.md)
105106
* [101. Symmetric Tree](leetcode-101-Symmetric-Tree.md)
106107
* [102. Binary Tree Level Order Traversal](leetcode-102-Binary-Tree-Level-Order-Traversal.md)

leetCode-10-Regular-Expression-Matching.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public boolean isMatch(String text, String pattern) {
146146

147147
时间复杂度:假设 text 的长度是 T,pattern 的长度是 P ,空间复杂度就是 O(TP)。
148148

149-
空间复杂度:申请了 dp 空间,所以是 O(TP),因为每次循环我们只需要知道 i 和 i + 1 时候的情况,所以我们可以向 [第 5 题](http://leetcode.windliang.cc/leetCode-5-Longest-Palindromic-Substring.html) 一样进行优化。
149+
空间复杂度:申请了 dp 空间,所以是 O(TP),因为每次循环我们只需要知道 i 和 i + 1 时候的情况,所以我们可以向 [第 5 题](https://leetcode.windliang.cc/leetCode-5-Longest-Palindromic-Substring.html) 一样进行优化。
150150

151151
```java
152152
public boolean isMatch(String text, String pattern) {

leetCode-9-Palindrome-Number.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
# 解法二
1212

13-
[第 7 道题](http://leetcode.windliang.cc/leetCode-7-Reverse-Integer.html)我们写了倒置 int 的算法,这里当然可以用到了,只需要判断倒置前后相不相等就可以了。
13+
[第 7 道题](https://leetcode.windliang.cc/leetCode-7-Reverse-Integer.html)我们写了倒置 int 的算法,这里当然可以用到了,只需要判断倒置前后相不相等就可以了。
1414

1515
记不记得,当倒置后的数字超出 int 的范围时,我们返回的是 0 ,那么它一定不等于原数,此时一定返回 false 了,这正不正确呢?
1616

leetcode100斩回顾.md

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
leetcode 100 斩!从第 1 题开始,到现在也差不多快一年了,回顾纪念一下。
2+
3+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/submit.jpg)
4+
5+
# 为什么开始刷题?
6+
7+
从大一就知道了 leetcode,但刷题总是三天打鱼,两天晒网,会发现刷过的题,隔一段时间再看还是需要很久才能再想起来,于是就萌发了刷一题总结一题的想法。
8+
9+
另一方面,leetcode 上的 discuss 里一些解,有时候讲解的很少,甚至只丢一些代码,对于我等这种菜鸟有时候看的太废劲了,所以不如自己把各种解法都理清楚,然后详细的总结出来,也方便其他人更好的理解。
10+
11+
# 刚开始的感觉
12+
13+
大一的时候,听过 ACM,然后暑假也去学校的 ACM 集训试了试,但当时基础太差了,栈和队列都不知道是什么,所以也就没有走上 ACM 的道路。之后就各种学安卓、web、后端的应用开发的一些东西了。后来准备开始刷题是大四毕业的时候了吧。
14+
15+
当时对回溯、动态规划也都只是上课的时候学过,也并不熟练。开始几题的时候,也都很慢,很多都自己想不出来。然后就去看别人的题解。看完以后,就什么都不看,然后按自己的思路再写一遍代码。
16+
17+
尤其是[第 5 题](<https://leetcode.wang/leetCode-5-Longest-Palindromic-Substring.html>),求最长回文序列,现在都印象深刻,记得当时用了好几天才把所有解法总结了出来。
18+
19+
所以大家如果想刷题的话,也不用怕自己基础不好,大不了哪些名词不会就去查,一点点积累就可以,重要的是**开始****坚持**
20+
21+
# 现在的感觉
22+
23+
从开始可能只是觉得该刷一刷题,到现在可能真的是爱上了刷题。
24+
25+
现在刷题基本可以想出一种思路,有时候甚至和最优解想到了一起,还会想出一些别人没有想到的解法,这种成就感可能就是打游戏超神的感觉吧,哈哈。
26+
27+
此外,看 discuss 的时候,每当看到令人拍案称奇的思路的时候,真的是让人心旷神怡,开心的不得了,就像中了彩票一样的开心,赶快去和同学分享。
28+
29+
有时候也会看到一些让人捧腹的评论,题目是输入一个字符串,输出所有可能的 ip 地址。
30+
31+
```java
32+
Input: "25525511135"
33+
Output: ["255.255.11.135","255.255.111.35"]
34+
```
35+
36+
![](https://windliang.oss-cn-beijing.aliyuncs.com/93_2.png)
37+
38+
![](https://windliang.oss-cn-beijing.aliyuncs.com/93_3.jpg)
39+
40+
# 刷题的收获
41+
42+
在总结的过程中,因为力求给他人讲懂,在理清思路的动机的过程中,会发现之前的想法可能是错的,会总结着总结着就明白了另一种解法,或者产生新的想法,或者明白各个解法相互之间的联系,会比仅仅 AC 多出很多收获。
43+
44+
从理清他人的想法,再到自己写出代码,再到把各个解法用自己的理解串起来,会有一种「纸上得来终觉浅,绝知此事要躬行」的感觉。有时候虽然大的框架有了,但是小的细节方面还是需要自己去体会。为什么加这个 if?为什么是小于等于?每一句代码的产生都是有原因的,绝不会是可有可无的代码。
45+
46+
所以虽然一道题从看题,理解,自己考虑,看别人解法,到重新实现,再到总结出来,可能需要 3、4 个小时,甚至 5、6 个小时或者更多,但我觉得是值得的。
47+
48+
此外,也有很多人加自己的微信过来亦或是感谢自己,亦或是指出错误,亦或是询问问题,亦或是没说过话的,哈哈。有微软、谷歌、百度、阿里、腾讯的大佬,有各个大学的学生,甚至巧的是还能加上高中的校友,世界真小,哈哈。
49+
50+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/addchat1.jpg)
51+
52+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/addchat2.jpg)
53+
54+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/addchat3.jpg)
55+
56+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/addchat4.jpg)
57+
58+
上边是最近加的一些人,每次收到别人的称赞自己也会很开心。此外,博客是直接放在 github 上的,目前也有 280 stars 了,是自己 github 上 start 数最多的项目了,说来也惭愧,希望以后自己努力可以有一个好的开源项目。
59+
60+
# 刷题的理解
61+
62+
一些人可能会纠结用什么语言去刷,其实没必要纠结的。刷题需要考虑的是算法,而不是语言。算法就像是从家里到超市该怎么走?出门左拐,右拐直走....而语言是我们选择的交通工具,骑车?步行?开车?平衡车?每种交通工具都有自己的优点和缺点,语言也是如此。而好的算法可能更像是,我们偶然发现了一条近路,降低了我们的时间复杂度或者是空间复杂度。
63+
64+
刷了 100 道题了,我觉得必须要掌握的就是递归的思想了,利用这个思想可以解大部分的题了。计算机擅长的就是记忆以及速度,而递归可以把这两个优势发挥到极致。遇到问题以后,我们可以考虑如何把大问题分解成小问题,想出来以后,代码很容易就出来了。
65+
66+
此外,一些递归可以用动态规划的思想改写,从而优化递归压栈所消耗的时间,递归是顶部到底部再回到顶部,而动态规划通过存储,直接从底部到顶部解决问题。
67+
68+
最经典的例子就是斐波那契数列了,求第 n 项数列的值。
69+
70+
> 斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34 …… 在数学上,斐波纳契数列定义如下:F ( 0 ) = 0,F ( 1 ) = 1 , F ( n ) = F ( n - 1 ) + F ( n - 2 )(n >= 2,n ∈ N*);
71+
72+
如果用递归的思想去写,代码简洁而优雅。
73+
74+
```java
75+
long Fibonacci(int n){
76+
if (n == 0)
77+
return 0;
78+
else if (n == 1)
79+
return 1;
80+
else
81+
return Fibonacci(n-1) + Fibonacci(n-2);
82+
}
83+
```
84+
85+
当然,这样的话太慢了,优化的话,就是把递归过程的结果保存起来,或者就是改写成动态规划,最强的是其实是有一个公式的,直接利用公式就可以。
86+
87+
此外,还有一些题目就是根据题目的理解去写代码了,没有什么特殊的技巧。
88+
89+
# 未来的打算
90+
91+
当然是继续刷下去了,很开心,每天不刷一刷题会不习惯的,希望大家也早日感受到刷题的乐趣,哈哈。
92+
93+
在线地址:[https://leetcode.wang](https://leetcode.wang),域名也比较好记,希望对大家会有帮助。
94+
95+
我是用 gitbook 搭建的,我觉得上边「搜索」的插件很好用,可以直接根据关键字搜出来自己想做的题。
96+
97+
![](https://windliangblog.oss-cn-beijing.aliyuncs.com/search.jpg)
98+
99+
知乎专栏也会同步更新:[<https://zhuanlan.zhihu.com/leetcode1024>](<https://zhuanlan.zhihu.com/leetcode1024>)
100+
101+
越努力,越幸运,共勉。

0 commit comments

Comments
 (0)