leetcode学习记录_斐波那契数列

剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

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

思路很简单,唯一需要注意的就是取模和特殊情况,取模最好在运算中取,最后特殊情况就是n = = 0 、 n= =1 、 n = = 2,一和二都通过if去掉了,而当n==0时(此时应返回0),由于for的条件,程序会直接return sum;所以我们把sum的初值设置为0就好了

class Solution {
public:
    int fib(int n) {
		if(n == 1 || n == 2)   return 1;
		int num1 = 1 , num2 = 1;
		int sum = 0;
		for(int i = 3;i <= n;i++)
		{
		sum = (num1 + num2)%(int)(1e9+7);
		num1 = num2;
		num2 = sum;
		} 
		return sum;
    }
};


剑指 Offer 10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

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

来源:力扣(LeetCode)

这题初看题目我还没反应过来,仔细想了一会反应过来
假设n = = 5,青蛙在跳到第3阶的时候可以跳两步直接上5,也可以在4阶的时候跳一步上5
假设台阶于方法数的关系为f(n)
由上面的例子可得f(5) = f(4) + f(3)
f(4)也同理 = f(3) + f(2)…
这题的程序于上面那题唯一不一样的地方就是初值,和特殊情况
在这里插入图片描述

class Solution {
public:
    int numWays(int n) {
        if(n == 0 || n == 1 ) return 1;//特殊情况
        int sum = 0 , n1 = 1 , n2 = 1;
        for(int i = 2 ; i<=n ; i++)//这里i = 2
        {
            sum = (n1 + n2)%(int)(1e9+7);
            n1 = n2;
            n2 = sum;
        }
        return sum;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timathy33

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值