LeetCode斐波那契数列、青蛙跳台阶、爬楼梯(C++,python)
原创
©著作权归作者所有:来自51CTO博客作者wx63a03d571f3d9的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、斐波那契数列
问题描述
写一个函数,输入n
,求斐波那契(Fibonacci)数列的第n
项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由0
和1
开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模1e9+7
1000000007
,如计算初始结果为:1000000008
,请返回 1
。
示例 1:
示例 2:
提示:
解题思路
- 使用递归和迭代,但是递归会超出时间限制。
- python语言的整型数值没有大小限制,只要计算机内足够就可以,C++有限制,需要及时取余。
代码实现
class Solution {
public:
int fib(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
long long num1 = 0, num2 = 1;
long long ans = 0;
for(int i = 2; i <= n; i++){
ans = (num1 + num2) % (int)(1e9 + 7); // 因为最后的结果就是取余
num1 = num2;
num2 = ans;
}
return ans;
}
};
class Solution:
def fib(self, n: int) -> int:
if n == 0:
return 0
if n == 1:
return 1
ans, num1, num2 = 0, 0 ,1
for i in range(2, n + 1):
ans = num1 + num2
num1 = num2
num2 = ans
return ans % (int)(1e9 + 7)
2、青蛙跳台阶问题
一只青蛙一次可以跳上1
级台阶,也可以跳上2
级台阶。求该青蛙跳上一个 n
级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007)
,如计算初始结果为:1000000008
,请返回 1
。
示例 1:
示例 2:
提示:
代码实现
class Solution {
public:
int numWays(int n) {
if(n == 0 or n == 1)
return 1;
if(n == 2)
return 2;
long long ans = 0, r1 = 1, r2 = 2;
for(int i = 3; i <= n; i++){
ans = (r1 + r2) % (int)(1e9 + 7);
r1 = r2;
r2 = ans;
}
return ans;
}
};
3、使用最小花费爬楼梯(动态规划)
本题目需重点掌握!!!
问题描述
数组的每个索引作为一个阶梯,第 i
个阶梯对应着一个非负数的体力花费值 cost[i]
(索引从0
开始)。
每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。
您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为0
或 1
的元素作为初始阶梯。
示例 1:
输入: cost = [10, 15, 20]
输出: 15
解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。
示例 2:
输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出: 6
解释: 最低花费方式是从cost[0]开始,逐个经过那些1,跳过cost[3],一共花费6。
注意:
cost 的长度将会在 [2, 1000]。
每一个 cost[i] 将会是一个Integer类型,范围为 [0, 999]。
解题思路
- 本题目是一道动态规划类型题目。状态转移方程为:
- 定义和分别代表一次爬上一个台阶时的最少消耗和一次爬上两个台阶时的最少消耗。开始和代表和的旧值。每次从后向前迭代,和更新为和的新值。最后的和代表着从第一个台阶开始的最优解和从第二个台阶开始的最优解,返回最终结果的最优解即为最少消耗爬楼梯问题。
代码实现
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int f1 = 0, f2 = 0;
for(int i = cost.size() - 1; i >= 0; i--){
int f0 = cost[i] + min(f1, f2);
f2 = f1;
f1 = f0;
}
return min(f1, f2);
}
};
运行截图