面试失败之24点算法
周一风尘仆仆(上午6点抵达成都)的去参加了凡客成都研发中心的面试,虽然经历一夜的折腾让我感觉头脑很不清醒,不过这种面试状态也不错,能让我深刻体验一下在不清醒状态下进行的思考和回答问题。午饭过后便出了门,习惯了不堵车,突然觉得成都的交通真的很拥堵。到达凡客成都研发中心填完表后等了大概10多分钟,面试官把我带进会议室,开始了面试。面试过程为由3位技术大牛面试官轮番面试,他们问了很多有意义的技术和管理类的相关面试问题,我含含糊糊的回答了,最终还是disqualified。不过我很感谢面试官们能告诉我,在我身上存在不足。我觉得每一次的面试都能让我成长一次,希望自己一次一次生长后能使我变的更强大。
话说回来,其中一位面试官问了一个简单的算法问题,如:“1~9的随机取出4个数组成24,如果可以组成则返回true,反之返回false”。这个题面试中遇到了无数次,网上也有很多思路,哎!一直没有去看过和想过。比划了半天也没有什么结果。回来后趁着上班间隙,自己思考了一下,为了给自己加深印象,写了一段代码(见附录,学习和交流)进行练习。
我的思路是:
逐个递归的方式(到处都是递归,我只是写法变了一下),如图。先把数组中的数逐个取出来,然后其余的组成新数组。取出来数于24进行加减乘除运算,以后统称为calc()(如果不能整除则返回),再把新数组中的所有数进行calc()将得到的结果进行对比,如果成功则停止运算返回true,不成功则,再从逐个取出新数组的数,其余的又组成另一个新数组,反复递归后得到结果。
由于我才疏学浅加上最近又学习了《The ThoughtWorks Anthology: Essay on Software Technology and Innovation》,自己摸索着写出来的东西请勿见笑,希望各位大牛在闲暇之余能帮我改进,我在此万分谢谢。附件:算法代码