【剑指offer】:青蛙跳台阶及变态跳台阶问题

青蛙跳台阶问题
0.题目

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

1.解题思路

首先,我们可以将问题简单化。假如只有1级台阶的话,肯定只有一种跳法;假如有两级台阶的话,就会有两种跳法,一种是一次跳一级,分两次跳,另一种是一次跳两级;那现在假设有n级台阶的话,我们可以把跳法看成是台阶数n的函数F(n),首先第一次跳就有两种跳法,一种是跳一级,剩下n-1级台阶的跳法就有F(n-1)中种跳法,另一种是第一次跳两级,剩下的n-2级楼梯的跳法就有F(n-2)种,那么这种情况下总的跳法就是F(n-1)+F(n-2)

我们可以把上述思路总结为一个公式,既Fibonacci数列,对于Fibonacci数列的解法总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/82228109

变态跳台阶问题
0.什么是变态跳台阶问题

在一些面试题中,我们还可以见到一些青蛙跳台阶的变形,就是一次可以跳一级,可以跳两级,也可以跳3级,一共有多少种跳法

1.解题思路

其实这道题和上边的思路完全一样,我们可以根据上边的思路可以写出一个递归公式:
这里写图片描述

可以看出,这个问题和Fibonacci很像,可以轻松写出代码

long long FibonacciQ(unsigned int n)
{
    if (n <= 2)
    {
        return n;
    }
    if (n == 3)
    {
        return 4;
    }
    return FibonacciQ(n - 1) + FibonacciQ(n - 2) + FibonacciQ(n - 3);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值