算法: 动态规划 - 斐波那契数列问题
斐波那契数列问题
LeetCode 509:斐波那契数 (通常用 F(n) 表示)形成的序列称为斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给定 n ,请计算 F(n) 该问题。
该问题可以通过以下几种方式进行解决:
递归实现
时间复杂度为,实现源码
我们在计算F(N)
的时候前面已经计算过F(n-1)
可以通过记忆F(n-1)
来降低计算的复杂度。
动态规划
时间复杂度为O(N)
,空间复杂度为O(N)
。
只依赖和可以进行空间压缩,利用滑动数组来降低空间复杂度。
动态规划+滑动数组
矩阵快速幂
时间复杂度为,空间复杂度为。
快速幂算法可以快速计算在的时间复杂度内计算得到结果。 快速幂算法源码较长,可以参考实现Github源码
通项公式
实现源码:
类似问题扩展
爬楼梯问题
LeetCode 70:爬楼梯问题 设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。 这就是一个斐波那契额数列问题,状态转移方程:F(n)=F(n-1)+F(n-2)F(n)=F(n−1)+F(n−2)
快速幂等公式推导:
第 N 个泰波那契数
LeetCode1137 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0=0, T1=1, T2=1, 且在 n>= 0 的条件下 Tn+3=Tn+Tn+1+Tn+2。给你整数 n,请返回第 n 个泰波那契数 Tn 的值
快速幂等公式推导:
版权声明: 本文为 InfoQ 作者【正向成长】的原创文章。
原文链接:【http://xie.infoq.cn/article/06e368c8d05cb93a7afee038c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论