剑指 Offer 10- II. 青蛙跳台阶问题

题目

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例:

输入:n = 7
输出:21

示例:

输入:n = 0
输出:1

示例:

输入:n = 2
输出:2

这题本质还是斐波那契数列,初始值为
n=0===>1
n=1===>1
n=2===>2 (1,1,或2)
那么我们就知道 所以循环起点应该是从1开始,因为1+2=3
n=3===>3(1,1,1或者2,1或者1,2)
n=4===>4 (1,1,1,1 或者2,1,1 或者1,2,1或者1,1,2 或者2,2)

python版本

class Solution(object):
	def numWays(self,n):
		a,b=1,2
		if(n==0) return 1
		for _ in range(1,n):
			a,b=b,a+b
		return a%1000000007

C++版本的时候
我尝试这么写

class Solution {
public:
    int numWays(int n) {
        vector<int> mp;
        if(n==0) mp.push_back(1); 
        else if(n==1) mp.push_back(1);
        else if(n==2) mp.push_back(2);
        else{
             mp.push_back((mp[n-1]+mp[n-2])%1000000007);
        }
        return mp[n];
    }
};

但是报内存泄漏,这个我目前还未能解决
然后就换了另一种写法

class Solution {
public:
    int numWays(int n) {
        if(n==0) return 1;
        if(n<=2) return n;
        int a=1,b=2,c=0; //a保存f(n-2) b保存f(n-1) c保存f(n)
        for(int i=3;i<=n;++i){
            c=(a+b)%1000000007;
            a=b;
            b=c;
        }
        return c;
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值