数据结构论坛

首页 » 分类 » 常识 » 编程笔试难题求到楼顶的方法总数考考你的
TUhjnbcbe - 2023/9/8 20:58:00
北京专科手足癣医院 http://www.yealer.com/pfb/2021/2021-01-17/m/12588.html

程序员笔试中算法题是必考题,一则是测试程序员的编码能力,二则是测试程序员的程序设计思维。本文给出一道编程笔试题,也是很多程序员应聘时遇到的难题,供大家参考、学习。

算法思维

试题

这道题解题的关键点在于:思维!话不多说,请直接看题!

试题

普通思维——找规律

分别对不同的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
1
查看完整版本: 编程笔试难题求到楼顶的方法总数考考你的