演算法之爬樓梯
阿新 • • 發佈:2018-10-31
題目:假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
沙雕解法一:利用遞迴,就是最後一步一定是前一步走一步或倒退兩步走兩步,超時!
#include "pch.h" #include <iostream> #include <string> using namespace std; int add(int n) { if (n == 1|| n == 2) return n; else return add(n - 1) + add(n - 2); } int main() { int n; cin >> n; if (n <= 0) cout << "error number" << endl; else cout << add(n) << "種方法。" << endl; }
好的解法:利用迴圈,時空複雜度都較小
class Solution { public: int climbStairs(int n) { if (n<=0) return 0; else { if(n==1||n==2) return n; else { int a=1; int b=2; int current = 0; for(int i=3;i<=n;i++) { current = a+b; a = b; b = current; } return current; } } } };
排名30萬。
以及今天犯了一個沙雕錯誤,都不好意思說