华为上机真题 2022猴子爬山
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022猴子爬山相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、题目描述
猴子爬山,经过一个有 N 阶台阶的阶梯,猴子有个习惯,每次只能跳 1 阶台阶或者 3 阶台阶,求猴子通过 N 个台阶有多少种不同的跳跃方式?
1.1 输入描述
输入只有一个整数 N (0 < N < 50),表示台阶的数量。
1.2 输出描述
输出一个数字,表示多少种跳跃方式。
1.3 测试样例
1.3.1 示例 1
输入
50
输出
122106097
1.3.2 示例 2
输入
3
输出
2
提示:斐波拉契数量的非递归解法,否则会爆掉
二、解题思路
本题比较简单,是一道菲波那切数列问题,假设 dp[ i ] 表示 i 个台阶有 dp[ i ] 中跳跃方式,那么:
dp[ i ] = dp[i - 1] + dp[i - 3]
跳第 i 个台阶是从 i - 1 和 i - 3 个台阶跳过去的(因为每次跳 1 个或 3 个台阶),所以跳 i 个台阶的跳跃方式是跳 i - 1 个和 i - 3 台阶跳跃方式的和。
注意:跳小于 3 个台阶的情况。
三、代码实现
代码实现如下所示。
#include <iostream>
using namespace std;
int main()
int n;
while (cin>>n)
if (n <= 2) // 处理特殊情况
cout<<1<<endl;
continue;
else if (n == 3)
cout<<2<<endl;
continue;
int dp[55];
dp[1] = 1; dp[2] = 1; dp[3] = 2;
for (int i = 4; i <= n; ++i) // 迭代处理斐波那契数列
dp[i] = dp[i - 1] + dp[i - 3];
cout<<dp[n]<<endl;
return 0;
四、时间复杂度
时间复杂度:O(n)
在上述代码中,只需要一次遍历即可计算出有多少种跳跃方式,所以时间复杂度为 O(n)。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于华为上机真题 2022猴子爬山的主要内容,如果未能解决你的问题,请参考以下文章