记得高中时偶然翻到一本小册子,书名叫《怎样解题》。它是美国的一个数学家,教育家写的。
当时我还陷入在应试教育的题海战术中,靠着大量的刷数学题来达到条件式的反射。这种方法对于 那些常规出题的套路来说,效果是不错的,但当遇到一些没见过的,新颖的题,就没有法子了。
也就是说,旧的方式无法是靠大量经验的积累来达到解题的目的。但,如果没有大量经验的累积呢?
每每看到一道不会的题,去翻阅答案,心中总有一门困惑,这个解答者是怎么想出来的呢?如果说他见过 类似的题,有着大量的经验,那么对于我这种缺乏经验之人,难道面对这种题就束手无策了么?
真到看到这本小册子,我才明白一个道理,解题并不仅仅依赖与你的经验,你的经验在遇到类似的题时,可能 发挥作用,但当你无法将其归类于自己过去所遇到过的模式时,怎么办呢?
书中给出了另外一种方法:启发示
其实这种方法就是教给你,当你面对一个你看似无能为力的题目时,如何用启发示的问题来一步步引导你来得到答案。 整个引导过程是自然的,而不是有什么所谓的"灵光一现","脑门一拍,有啦!"
现面,虽然面对的不再是数学题,而是算法题,而网上的各种题解依然是仅仅给出了答案,其给出的看似是解题思路的内容 不过是把代码用文字再翻译了一遍,这些思路并没有教给你,让你自己能想出答案,它们仿佛就是解答者的"灵光一现"。
我觉得对于算法题,也可以应用这种启发示的思想,来给每一题目一个自然而然的解题思路,希望你看到后,也能觉得自己能解出来 而不是有一种背诵思路的感觉。
最后是不是真正掌握了一道题,你只要问自己一个问题
你能清晰的自信的,没有背诵答案试的,讲出这个题的解题思路吗?
下面是《怎样解题》中给出的一些步骤和问题,你在解题过程中,应该时刻提醒自己这些问题
- 刷题频率 工作日每天一至两道, 周末每天2至3道, 一周10道, 一月40道, 到明年3月份, 刷完300道就行了.
- 刷题顺序 先分类刷, 比如数组, 链表, 树, 栈, 队列, 图 对于每一类, 如果有几个题是相似的, 就一起刷, 从简单到复杂, 这几个类似的题做为一组.
- 记录思路: 思路要和代码放在一起, 有好的思路时, 更新代码, 更新代码时, 也更新思路. 思路会展现由简单到复杂的情况, 代码也要展现思路, 即回答, 你是如何想出来的 对话的内容由问题出发, 启发示的, 由简到难, 然后
- 代码可以直接粘贴到leetcode运行
- 由源码生成最终文件