题解 | #跳台阶扩展问题#

跳台阶扩展问题

http://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387

一.题目描述
JZ9 跳台阶扩展问题
题目链接:https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&&tqId=11162&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
注意审题:该题青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.
二.算法1(找规律)
图片说明
可发现 1,2,4,8,16,32(n=1,2,3,4,5,6)即2^(n-1).找到规律可以求出n阶台阶的方案数了.

class Solution {
public:
    int jumpFloorII(int number) {
        long long a=2,b=number-1,c=1;
        while(b){//用的快速幂求2^(n-1)速度更加快
            if(b%2) c*=a;
            a*=a;
            b/=2;
        }
        return c;
    }
};

复杂度:o(logn)
优缺点:实现比较方便,但是规律不容易发现要至少例举到5才可以发现规律
三.算法2(递归)
图片说明
图片说明
两式相减得:图片说明
得到上述关系式子直接上代码:

class Solution {
public:
    int jumpFloorII(int number) {
        if(number<= 0)
            return -1;
        else if(number==1)
            return 1;
        else{
            return 2*jumpFloorII(number-1);
        }
    }
};

复杂度:o(n)
优缺点:实现比较简单,但是利用函数进行推导不容易想到.

全部评论
感觉最容易想到的还是得数学公式,做起来有理有据,其他的感觉就是死记硬背或者本质是还是模糊化的数学公式
点赞 回复 分享
发布于 2023-07-16 17:22 广东

相关推荐

被普调的六边形战士很高大:项目经历貌似和专业或者求职方向没大关系?
点赞 评论 收藏
分享
03-03 10:35
3d人士会梦见住进比弗利山庄吗:这四个项目属于是初学者的玩具了。不知道面试官咋问,而且双非本搞算法除了9,还是保守至少c9
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务