public class Solution {
public int fib(int n) {
int[] dp = new int[2];
if(n<=1) return n;
dp[0] = 0;
dp[1] = 1;
int sum = 0;
for(int i=2;i<=n;i++){
sum = dp[0]+dp[1];
dp[0] = dp[1];
dp[1] = sum;
}
return sum;
}
}
使用动态规划
一开始想到建立一个有n个位置的一维dp数组,但是还有更节约空间的,
是使用两个空间存储前面两个数字,之后只要设立sum变量,每次把dp【0】和 dp【1】相加存储进去即可,
然后再把dp【1】的数字赋值给dp[0],把sum赋值给dp[1]
一开始没有通过,是因为在n== 1的时候没有处理好,要在函数开始时添加入一个条件,
如果n == 1 就返回1。
第二次错误在for循环中,i的取值从2开始,因为第一个sum的数值就是斐波那契数列的第二个数