n<=39
class Solution {
public:
int Fibonacci(int n) {
int preNum = 1;
int prePreNum = 0;
int result = 0;
if(n<=1)
return n;
for(int i = 1; i < n; i++){
result = preNum + prePreNum;
prePreNum = preNum;
preNum = result;
}
return result;
}
};
如果测试用例里有一个很大的n,则可能会发生溢出。
class Solution {
public:
int jumpFloor(int number) {
if (number == 0 || number == 1 || number == 2)
return number;
int jumpSum = 0;
int jumpTwo = 1; //往前算两个台阶的跳法
int jumpOne = 2;//往前算一个台阶的跳法
for(int i = 3; i<=number; i++){
jumpSum = jumpOne + jumpTwo;
jumpTwo = jumpOne;
jumpOne = jumpSum;
}
return jumpSum;
}
};
跳台阶问题升级版本:class Solution {
public:
int jumpFloorII(int number) {
int a = 1;
return a << number - 1; //左移一位表示乘以2,2^number-1
}
};
(分析引自牛客网:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6)
程序思路:同以上斐波那契数列一样,直接递归计算,会报时间不够的问题,所以用循环结算,节省时间。
class Solution {
public:
int rectCover(int number) {
if(number < 1)
return 0;
else if(number ==1 or number == 2){
return number;
}
else{
int result=0;
int first = 1;
int second = 2;
for(int i = 3; i <= number; i++){
result =first + second;
first = second;
second = result;
}
return result;
}
}
};