问题说明:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768K
看到这道题时我先想的是写下来规律f(1)=1,f(2)=2,f(3)=3,f(4)=5,f(5)=8然后找不到规律,我就去百度了,知道了这是斐波那契递归,然后就用f(n)=f(n-1)+f(n-2) (n>2)来写,发现行不通,因为时间过长。于是继续百度,发现有种方法是数学归纳法,其实就是多写几次。
设置了三个参数 one=f(n-1),two=f(n-2),tmp=f(n)
然后让tmp=one+two,再让two=one,one=tmp进行循环,就出来了,数学公式是f(n)=2n-1
class Solution {
public:
int jumpFloor(int number) {
int one=1;
int two=2;
int tmp=1;
if(number<3)
{
return number;
}
else{
for(int i=3;i<=number;i++){
tmp=one+two;
one=two;
two=tmp;
}
return tmp;
}
}
};
问题说明:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768K
这里的斐波那契函数是f(n)=2*f(n-1) (n>2)
用同样的方式编写
tmp=f(n),num=f(n-1)
class Solution {
public:
int jumpFloorII(int number) {
if(number<3)
{
return number;
}
else
{
int tmp=1;
int num=2;
for(int i=3;i<=number;i++){
tmp=2*num;
num=tmp;
}
return tmp;
}
}
};