不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

LeetCode-509-fibonacci-number | 斐波那契数

题目描述

力扣_509. 斐波那契数

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

1
2
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给你 n ,请计算 F(n) 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
示例 1:
输入:2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:
输入:3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:
输入:4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
 

提示:
0 <= n <= 30

题目解析

常用递归解法

1
2
3
4
5
6
7
//Go
func fib(n int) int {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}

数组解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Go
func fib(n int) int {
if n <= 1 {
return n
}

nums := make([]int, 31)
nums[0] = 0
nums[1] = 1
for i := 2; i <= n; i++ {
nums[i] = nums[i - 2] + nums[i - 1]
}

return nums[n]
}

动态规划解法

1
2
3
4
5
6
7
8
9
10
11
12
13
//Go
func fib(n int) int {
if n < 2 {
return n
}
p, q, r := 0, 0, 1
for i := 2; i <= n; i++ {
p = q
q = r
r = p + q
}
return r
}
------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!