劍指offer - 斐波那契數列 - C++
阿新 • • 發佈:2019-01-12
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的指數,不實用。