APP下载

LeetCode基础演算法题第141篇:爬楼梯问题

消息来源:baojiabao.com 作者: 发布时间:2024-05-21

报价宝综合消息LeetCode基础演算法题第141篇:爬楼梯问题

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分散式> 聊到大资料框架,从大资料聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我。

我会持续分享下去,敬请您的关注。

LeetCode 70. 爬楼梯(Climbing Stairs)

问题描述:

你正在爬楼梯。它需要走n个台阶才能达到终点。每次你可以迈上1个台阶或2个台阶。您可以有多少种不同的方式到达终点?

注:

给定n将是一个正整数。

示例:

C语言实现:

从题目看的话,这是一个组合数学问题。于是我试着对n连续取不同的整数值,求不同的组合总数。

如下公式所示:

为了直观展示,我分别列出了当n取1,2,3,4,5,6时最终的不同走法组合总数。

结果看起来是不是很熟悉。这不是"斐波那契数列"吗?

我们简单分析,这个问题是否真的契合"斐波那契数列"。

斐波那契数列的递回形式可以用公式表示为:

Fib(x) = Fib(x-1)+Fib(x-2)

如果爬楼梯的问题契合"斐波那契数列"的话,就是说爬到第x台阶的所有方式,等于爬到第x-1台阶和第x-2台阶的所有方式的和。

答案是肯定的,理由是:

若我们先到达第x-1台阶我们只需再迈1个台阶就到达第x台阶;如果以这种方式,所有到达x层的方式就等于所有到达x-1层的方式。若我们先到达第x-2台阶我们只需再一次迈2个台阶就到达第x台阶;如果以这种方式,所有到达第x台阶的方式就等于所有到达第x-2台阶的方式。此外我们还要考虑到n的取值。

由于n值是正整数,且当n=1是,结果是1,所以可以转化为求Fib(n+1)的值的问题。

关于求斐波那契数列的问题,我们在"第68篇"说到过。这里我们依然是通过斐波那契数列的通项公式来求解。

程式码如下:

注意程式码中在转换成整数前对结果加了0.001,这是由于浮点数转换成整形是直接截断的,虽然计算机计算的精度很高,但是很可能会出现小数点后很多9的情况,这时转换就会比实际结果少1,所以我们在转换前的浮点数后面加一个很小的浮点数。

在此再次感谢"瓶子42277861"。

Java语言实现:

Java 的实现和C语言的实现一致,不再撰述。

程式码如下:

Python语言实现:

Python 的实现和C语言的实现一致,不再撰述。

程式码如下:

谢谢大家一直以来的关注和支援!

我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!

2019-07-04 14:49:00

相关文章