跳台阶_字节跳动/网易互娱/华为/猿辅导笔试编程C/C++

 

昨夜剁手了又,钱包说“干啥啥不行,花钱第一名,快去写码刷题!”^o^,所以我来三分钟速刷了这一题。(2021年3月5日)

题目描述

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

(同样,还是附上牛客网该题的链接:https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4?tpId=188&tqId=37521&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-week%2Fquestion-ranking&tab=answerKey

 

题目分析:

做题三分钟,讲题我可得慢点儿哈~

这个题,一看,求各种可能结果的数量,立刻想到-->这要么是递归,要么是动态规划

这题比较简单,递归就不会超时超空间

不会判断的码友,也不急,我们可以用倒推的办法发现规律。

 

现有一个青蛙n个台阶,我们定义用f(n) 表示它有f(n)种跳法上来的。(为了好理解,给大家PS个青蛙跳台阶图

那么,思考下,这个绿青蛙(在第n级台阶),会是从哪里跳来的呢?

(共有两种可能:

1--从第n-1级台阶,向上跳1个台阶,到达第n级台阶

2--从第n-2级台阶,向上跳2个台阶,到达第n级台阶

你说“还有别的可能么”,没了,因为青蛙只会跳1个台阶跳2个台阶

那么,f(n)种跳法等于到达n-1级台阶的跳法 + 到达n-2级台阶的跳法

 

再推一步(递归公式):

上面我们说啊,

n个台阶,它有f(n)种跳法上来的;

那么,把n换成n-1、换成n-2,大家还会表示的,对吧

n-1个台阶,它有f(n-1)种跳法上来的;

n-2个台阶,它有f(n-2)种跳法上来的;

 

那么,得到(递归公式),

f(n) = f(n-1) + f(n-2)

因为:[f(n)种跳法等于到达n-1级台阶的跳法 + 到达n-1级台阶的跳法]

 

计算f(1)、f(2)

因为有台阶,青蛙才可以跳,所以,台阶数一定是大于0的

所以,套用递归公式f(n) = f(n-1) + f(n-2)时,要满足

n > 0

n - 1 > 0

n - 2 > 0

所以,n 要大于2

 

我们需要计算下f(1)、f(2)的值,

 

本文唯一的图哈

 

从平地,向上跳1个台阶,到达第1级台阶

共1种跳法,f(1) = 1;

 

从平地,向上跳1个台阶再向上跳1个台阶,到达第2级台阶

从平地,向上跳2个台阶,到达第2级台阶

共2种跳法,f(2) = 2;

 

完整递推公式

f(1) = 1                         (n>0)

f(2) = 2                         (n>0)

f(n) = f(n-1) + f(n-2)              (n>2)

 

C++代码

最后,上C++代码

class Solution {

public:

    int jumpFloor(int number) {

        if(number > 0)/*因为有台阶,青蛙才可以跳,所以,台阶数一定是大于0的。*/

        {

            switch(number)

            {

                case 1:/*计算仅1个台阶时*/

                {

                    return 1;

                    break;

                }

                case 2:/*计算仅2个台阶时*/

                {

                    return 2;

                    break;

                }

                default:

                {

                    return (jumpFloor(number - 1) + jumpFloor(number - 2));

                }

            }

        }

        else

        {

            return 0;

        }

    }

};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值