目录
写在前面:
题目:剑指 Offer 10- I. 斐波那契数列 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
题目:剑指 Offer 10- II. 青蛙跳台阶问题 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
小总结:
写在最后:
写在前面:
军训好累,没话说了。
题目:剑指 Offer 10- I. 斐波那契数列 - 力扣(Leetcode)
题目的接口:
class Solution {
public:
int fib(int n) {
}
};
解题思路:
直接根据斐波那契数列的特性,
写一个循环即可。
代码:
class Solution {
public:
int fib(int n) {
//设置f1和f2两个变量作为计算数列下一个数的前两个数
int f1 = 0;
int f2 = 1;
//这是题目的要求,我们利用一下,这样整形变量的大小就够用
int m = (1e9 + 7);
//这是第一个数和第二个数的情况
if(n == 0)
{
return 0;
}
if(n == 1)
{
return 1;
}
int ret = 0;
//写一个循环,根据斐波那锲数列规则计算下一个值
for(int i = 0;i<n-1;i++)
{
//按题目要求取模
ret = (f1 + f2) % m;
f1 = f2;
f2 = ret;
}
return ret;
}
};
过啦!!!
循环就是比递归快,时间超过100%了。
题目:剑指 Offer 10- II. 青蛙跳台阶问题 - 力扣(Leetcode)
题目的接口:
class Solution {
public:
int numWays(int n) {
}
};
解题思路:
这道题一开始看的时候我是有点懵的,
然后我就算了一下条几级台阶会有几种方法,
0级台阶1种方法;(题目给了个示例)
1级台阶1种方法;
2级台阶2种方法;
3级台阶3种方法;
(如果先跳1级,就变成2级台阶的跳法;先跳2级,就变成1级台阶的跳法)
1 + 2 就等于3种方法。
4级台阶5种方法。
(如果先跳1级,就变成3级台阶的跳法;先跳2级,就变成2级台阶的跳法)
3 + 2 就等于5种方法。
这时,我们惊喜的发现,这不就是一个斐波那契数列吗,
我当场复用上一段代码。(记得要注意细节)
代码:
class Solution {
public:
int numWays(int n) {
//设置f1和f2两个变量作为计算数列下一个数的前两个数
int f1 = 1;//记得改一下细节
int f2 = 1;
//这是题目的要求,我们利用一下,这样整形变量的大小就够用
int m = (1e9 + 7);
//这是第一个数和第二个数的情况
if(n == 0)
{
return 1;//记得改一下细节
}
if(n == 1)
{
return 1;
}
int ret = 0;
//写一个循环,根据斐波那锲数列规则计算下一个值
for(int i = 0;i<n-1;i++)
{
//按题目要求取模
ret = (f1 + f2) % m;
f1 = f2;
f2 = ret;
}
return ret;
}
};
过啦!!!
小总结:
刷题的意义之一,
其实就是当我们再次遇到类似的题目的时候,
我们能比别人更加容易想到更好的思路,就像这两道题目一样。
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。