【LeetCode】NO.70 爬樓梯 (C++ & Python) [動態規劃]
阿新 • • 發佈:2021-12-31
動態規劃第二彈!!!
題目:爬樓梯 easy
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
思路
動態規劃題
- 考慮到達第i層的時候
在第i-2層每次跳兩步達到第i層
在第i-1層跳1步到達第i層
為什麼要考慮i-1和i-2:
這是因為本來有兩種狀態可以到達第i層
我們要把這兩種狀態找出來之後組合之後就是到達第i層的所有狀態,求出狀態轉移方程;
之後初始化;
程式碼
Python
class Solution: def climbStairs(self, n: int) -> int: if n<=2: return n dp = [0]*(n+1) dp[0]=1 dp[1]=1 dp[2]=2 sum = 0 for i in range(3,n+1): sum = dp[2] + dp[1] dp[1] = dp[2] dp[2] = sum print(sum) return sum
C++
class Solution { public: int climbStairs(int n) { vector<int> dp(n+1); //初始化陣列 if (n<=2){ return n; } dp[0] = 0; dp[1] = 1; dp[2] = 2; for(int i=3;i<n+1;i++) { dp[i] = dp[i-2] + dp[i-1]; } return dp[n]; } };
空間複雜度:O(n)
時間複雜度:O(n)
優化:
class Solution { public: int climbStairs(int n) { vector<int> dp(3); //初始化陣列 if (n<=2){ return n; } dp[0] = 0; dp[1] = 1; dp[2] = 2; int sum = 0; for(int i=3;i<n+1;i++) { sum = dp[1] + dp[2]; dp[1] = dp[2]; dp[2] = sum; } return sum; } };
空間複雜度:O(1)
時間複雜度:O(n)
本文來自部落格園,作者:jucw,轉載請註明原文連結:https://www.cnblogs.com/Jucw/p/15753588.html