最近在牛客网刷编程题踩到一个坑,记录一下。
题目:计算斐波那契数列(1, 2, 3, 5, 8,...)的第n个数。
先贴代码:
class Solution {
public:
int rectCover(int number) {
int pre = 1;
int result = 1;
while (--number) {
result += pre;
pre = result - pre;
}
return result;
}
};
乍一看,这个代码好像没什么问题。代入number分别为1,2,3,4,5,确实都能算出对应的1,2,3,5,8。但是在提交运行后却会报错:
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
看出这个代码有什么问题了吗?
聪明的你一定猜对了,当输入number为0的时候,由于代码没有做判断,直接导致了number减1直接变成了int的负最小值!
修改很简单,在while循环之前加入这段判断代码就可以了:
if (number <= 0) {
return 0;
}