剑指 Offer 10_I.斐波那契数列
题目描述
写一个函数,输入n
,求斐波那契(Fibonacci)数列的第n
项(即F(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
输入:n = 2
输出:1
示例2
输入:n = 5
输出:5
提示
0 <= n <= 100
代码演示
Java 数组方式/循环取余
public class Interview10_I {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.fib(2));
System.out.println(s.fib(5));
Solution02 s2 = new Solution02();
System.out.println(s2.fib(2));
System.out.println(s2.fib(5));
}
}
class Solution {
public int fib(int n) {
if(n < 2)
return n;
long[] Fibonacci = new long[n + 1];
Fibonacci [0] = 0;
Fibonacci [1] = 1;
for(int i = 2; i <= n; i++){
Fibonacci [i] = Fibonacci [i - 1] + Fibonacci [i - 2];
Fibonacci [i] %= (Math.pow(10,9) +7);
}
return (int)Fibonacci[n];
}
}
class Solution02 {
public int fib(int n) {
int first = 0, second = 1, sum;
for(int i = 0; i < n; i++){
sum = (first + second) % 1000000007;
first = second;
second = sum;
}
return first;
}
}
Java1 提交结果
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:34.6 MB, 在所有 Java 提交中击败了99.94% 的用户
Java2 提交结果
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:34.9 MB, 在所有 Java 提交中击败了98.43% 的用户
代码演示
Python3 数组方式/循环取余
# 循环取余 Python不比考虑整形数字大小越界
class Solution:
def fib(self, n: int) -> int:
first,second = 0,1
for _ in range(n):
first, second = second, first + second
return first % 1000000007
class Solution02:
def fib(self, n: int) -> int:
if(n < 2):
return n
Fibonacci = []
Fibonacci.append(0)
Fibonacci.append(1)
for i in range(2,n+1):
temp = Fibonacci[i - 1] + Fibonacci[i - 2]
temp = temp % 1000000007
Fibonacci.append(temp)
return Fibonacci[n]
if __name__ == "__main__":
S = Solution()
print(S.fib(2))
print(S.fib(5))
S2 = Solution02()
print(S2.fib(2))
print(S2.fib(5))
Python01 提交结果
执行用时:44 ms, 在所有 Python3 提交中击败了31.96% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了58.35% 的用户
Python01 提交结果
执行用时:40 ms, 在所有 Python3 提交中击败了59.57% 的用户
内存消耗:14.7 MB, 在所有 Python3 提交中击败了87.06% 的用户