1. 程式人生 > >劍指offer - 斐波那契數列 - C++

劍指offer - 斐波那契數列 - C++

https://www.nowcoder.com/profile/4388697/codeBooks?problemId=3694

時間複雜度:n 空間複雜度: 1

class Solution {
public:
    int Fibonacci(int n) {
        int minus1 = 1,  minus2 = 0;
        int value;
        if(n == 1) return 1;
        if(n == 0) return 0;
        for(int i=2; i<=n; i++) {
            value = minus1 + minus2;
            minus2 = minus1;
            minus1 = value;
        }
        return value;
    }
};

通過前的那些錯誤:1 ,和;用的中文標點符號  2 for迴圈裡寫了逗號  3 沒寫0和1的返回 4 ==寫成=

反思:多練;注意邊界條件的處理和返回。用簡單的例子試一試,自己檢查檢查程式碼再提交,別依賴錯誤提示資訊。這樣也不用看著自己一堆沒什麼用的提交記錄,進步也快些。

 

第一版解法:

簡潔一點,但是空間複雜度是n,只求最後結果並不需要把子問題都記錄下來。

class Solution {
public:
    int Fibonacci(int n) {
        int arr[n];
        arr[0] = 0;
        arr[1] = 1;
        for(int i=2; i<=n; i++) {
            arr[i] = arr[i-1] + arr[i-2];
        }
        return arr[n];
    }
};

出現過的問題:c++陣列宣告寫錯

沒錯,我要開始用c++刷題了。本科學了c++,資料結構,雖然實驗都是抱大腿,沒實踐過,但是理論我都是90+呀。指標什麼的我都是理解過的,只是重拾而已,幹嘛要逃避呢。況且參考的書也是c++寫的。並沒有那麼難的,或者說用到的東西並不難。加油!

 

第三版未通過

遞迴時間複雜度是n的指數,不實用。