Leetcode斐波那契数列问题
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
这道题我们可以用递归或者动态规划来完成。
递归思路——根据给出的斐波那契数列公式,将F(N)视为一个函数,函数求值的过程中不断调用自身。
动态规划——将公式中的F视为一个数组,F(N)即数组中下标为N的值。
递归解法:
class Solution { /**
* @param Integer $n
* @return Integer
*/
function fib($n) {
if($n<2){
return $n;
}else{
return $this->fib($n-1)+$this->fib($n-2);
}
return $dp[$n];
}
}
动态规划解法:
class Solution { /**
* @param Integer $n
* @return Integer
*/
function fib($n) {
// if($n<2){
// return $n;
// }
$dp = ["0"=>0,"1"=>"1"];
for($i=2;$i<=$n;$i++){
$dp[$i] = ($dp[$i-1]+$dp[$i-2]) % 1000000007;
}
return $dp[$n];
}
}
斐波那契数列是从1开始的,数组键值不存在负数,在方法中不必考虑负数情况。至于为什么直接列出数组,直接列数组可以省去前置的判断。
以上是 Leetcode斐波那契数列问题 的全部内容, 来源链接: utcz.com/z/514380.html