(java版剑指offer)JZ10 斐波那契数列

斐波那契数列

https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=265&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu

alt

//方法一:递归
//时间复杂度:2^n
//空间复杂度:n
public class Solution {
    public int Fibonacci(int n) {
        if(n<=1){
            return n;    //n为1,返回1;n为0,返回0
        }
        return Fibonacci(n-1) + Fibonacci(n-2);    //递归
        //f(2)=f(1)+f(0)=1+0
        //f(3)=f(2)+f(1)=1+1 = 2
    }
}
//方法二:数组存储法
//时间复杂度: n
//空间复杂度:n
public class Solution {
    public int Fibonacci(int n) {
        int[] ans = new int[40];    //新建一个数组
        ans[0] = 0;
        ans[1] = 1;
        //遍历存储1-40对应的斐波拉契数据于数组中
        for(int i=2;i<=n;i++){
            ans[i] = ans[i-1] + ans[i-2];    //每个数组下标位置存放有对应的斐波拉契数据
        }
        return ans[n];    //通过数组下标即可寻得对应的斐波拉契数据,有些费空间
    }
}
//方法三:相邻三个数存储法
//时间复杂度: n
//空间复杂度:1
public class Solution {
    public int Fibonacci(int n) {    
        if(n <= 1){
            return n;
        }
        
        //只存储相邻三个数
        int left_1 = 0;
        int left_2 = 1;
        int last = 0;
        
        for(int i=2; i<=n; i++){
            last = left_1 +left_2;
            left_1 = left_2;
            left_2 = last;
        }
        
        return last;
    }
}

//方法四:只存储相邻两个元素
//时间复杂度: n
//空间复杂度:1
public class Solution {
    public int Fibonacci(int n) {    
        if(n <= 1){
            return n;
        }
        
        //只存储相邻两个数
        int left = 0;
        int last = 1;
        for(int i=2; i<=n; i++){
            last = left + last;    //末尾元素
            left = last - left;    //相邻左边的元素
        }
        return last;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:10
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
完美的潜伏者许愿简历...:隐藏信息被你提取出来了,暗示,这就是暗示
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务