《剑指Offer》第四章笔记
  解决面试题的思路 
        “编码前讲自己的思路是一个考查指标。一个合格的应聘者应该在他做事之前明白自己要做的事情是什么,以及该怎么做。一开始就编码的人员,除非后面表现得非常优秀,否则很容易通不过”。 
                                                                                                                                                ——殷焰(支付宝,高级安全测试工程师) 
       第一节给出了很多公司经理资深程序员对面试思路的看法,可以看出面试官对编程思路是很看重的,编码之前没有一个清晰的思路,编码时很容易犯错误,也会降低自己拿offer的几率。 
       在面试的时候,我们难免会遇到难题,如何去解决这些问题,这章给了我们三个有力的方法:画图、举例、分解。 
         1. 画图  
             图形能使抽象的问题具体化、形象好,所以在面试过程中我们可以通过画图来帮助自己分析、推理。很多面试题很抽象,不容易找到解决办法,这时不妨画出一些与题目相关的图形,  
             借以辅助自己观察和思考。  
             像书中例题29:顺时针打印矩阵:输入一个矩阵,按照从外到里以顺时针的顺序依次输出每一个数字。例如,如果输入以下矩阵:  
             1   2   3   4  
             5   6   7   8  
             9   10  11  12  
             13  14  15  16  
             则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。  
             我开始看到题目的时候,心想这应该就是一个简单的模拟,只有确定好边界条件即可,然后就开始在脑海中想应该如何确定边界条件。而书中的解法是先画几个类似的矩阵方块图出来,  
             进行几次模拟,把矩阵想象成若干个圈,用一个循环来打印矩阵,每次打印矩阵的一个圈,这样很容易就确定了循环开始和结束的条件。  
         2. 举例     
             用举例模拟的方法也可以思考分析复杂的问题。当一眼看不出问题中隐藏的规律的时候,我们可以试着用一两个具体的例子来模拟操作的过程,这样说不定就能通过具体的例子找出抽象  
            的规律。具体的例子也可以帮助我们向面试官解释算法思路。算法通常是抽象的,用语言不容易表述得很清楚,我们可以考虑举一两个具体的例子,告诉面试官我们的算法是怎么一步步  
             处理这个例子的。同时,具体的例子还可以帮助我们确保代码的质量。在面试中写完代码之后,应该先检查一遍,确保没有问题再交给面试官,这时我们可以运行几个测试用例。我们可  
             以把这些例子当做测试用例,在心里模拟运行,看每一步操作之后的结果和我们预期的是不是一致。如果每一步的结果都和事先预计的一致,那我们就能确保代码的正确性啦。  
         3. 分解  
             分解让复杂问题简单化。这个方法有点像分治法,将复杂的问题分解为类似的小问题,将小问题解决后,大问题也就差不多解决啦,通常可以用递归来实现。  
 