题目链接:70. Climbing Stairs
C++
//Approach 1
//动态规划问题,假设 dp[i] 表示登上阶梯i的方法数,则dp[i] = dp[i-1] + dp[i-2] 其中 i >=2 dp[0]=0 dp[1]=1 dp[2]=2
class Solution{
public:
int climbStairs(int n){
int dp[1000];
dp[0]=0;
dp[1]=1;
dp[2]=2;
if(n<=2)return dp[n];
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
C++优化空间
class Solution{
public:
int climbStairs(int n){
int ans=3,pre1=1,pre2=2;
if(n<=3)return n;
for(int i=4;i<=n;i++){
pre1=pre2;
pre2=ans;
ans = pre1+pre2;
}
return ans;
}
};
Python
class Solution:
def climbStairs(self, n: int) -> int:
ans = 3
pre1=1
pre2=2
if n<=3 :return n
for i in range(4,n+1):
pre1=pre2
pre2=ans
ans=pre1+pre2
return ans