LeetCode.509.斐波那契数
难度:easy
Java:
动态规划:
- 确定dp数组及下标位置: dp[i]的定义为:第i个数的斐波那契数值是dp[i]
- 递推公式:
dp[i] = dp[i-1] +dp [i-2]
- dp数组初始化:
dp[0] = 0; dp[1] = 1;
- 遍历顺序:从前往后
- 举例推导dp数组
//非压缩状态的版本 class Solution { public int fib(int n) { if (n <= 1) { return n; } int[] dp = new int[n + 1]; dp[0] = 0; dp[1] = 1; for (int i = 2; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; }
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(n)
class Solution { public int fib(int n) { if (n <= 1) { return n; } int a = 0; int b = 1; int c = 1; for (int i = 2; i <= n; i++) { c = a + b; a = b; b = c; } return c; } }
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
递归方法:
class Solution { public int fib(int n) { if (n < 2) { return n; } return fib(n - 1) + fib(n - 2); } }
复杂度分析:
- 时间复杂度:O(2^n)
- 空间复杂度:O(n) 算上了编程语言中实现递归的系统栈所占空间
还有些比较高级的方法:通项公式法和矩阵快速幂法就不说了;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)