程序员笔试中算法题是必考题,一则是测试程序员的编码能力,二则是测试程序员的程序设计思维。本文给出一道编程笔试题,也是很多程序员应聘时遇到的难题,供大家参考、学习。
算法思维试题
这道题解题的关键点在于:思维!话不多说,请直接看题!
试题普通思维——找规律
分别对不同的N列出所有的走法,找规律:
N=1,走法=1,方法总数=1
N=2,走法=11/2,方法总数=2
N=3,走法=/12/21,方法总数=3
N=4,走法=1///22/,方法总数=5
……
可以发现规律:走N个楼梯到楼顶的方法等于走N-1个与走N-2个楼梯到楼顶方法的和。
代码实现一:递归
递归实现该代码实现虽然说能解决问题,但递归代码占用空间大,时间复杂度较高,不是一种高效的代码,那么有什么方法提高效率呢?请看下面的代码。
代码实现二:迭代
代码实现一程序员思维
假设到达第N阶梯的走法总数为F(N),那么怎么才能走到第N阶梯呢?只有两种方法:
从N-1阶梯走1个阶梯到达从N-2阶梯走2个阶梯到达那么走到第N阶梯的走法总数F(N)就等价于求走到第N-1个阶梯和走到第N-2个阶梯的走法总数之和,即
F(N)=F(N-1)+F(N-2)
如果数学基础比较好的同学明显能看出这就是著名的斐波那契数列:
斐波拉契数列示意图而该数列是有通项公式的:
通项公式与推导所以最有效的解法是:
数列解法总结
程序员一定要去学习数据结构与算法,目的不是让你掌握每一种算法,而是训练算法思维,这对于程序员来说是非常重要的素质。
C