LeetCode 70. 爬楼梯 C++&java

假设你正在爬楼梯。需要 n 步你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 步 + 1 步
2.  2 步

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 步 + 1 步 + 1 步
2.  1 步 + 2 步
3.  2 步 + 1 步

class Solution {
public:
    int climbStairs(int n) {
        
        // 思路:  这是一题简单的dp问题  先写出递推表达式 dp[i] = dp[i-1] + dp [i-2] ;
        vector<int> dp(n+1);
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2; 
        for(int i = 3;i<=n;i++)  // 直接循环到 n    ,  dp[n] = dp[n-1]+ dp[n-2] ;
        {
            dp[i] = dp[i-1] +dp[i-2] ;
        }
        return dp[n] ;

};

java:

class Solution {
    public int climbStairs(int n) {
        int[] dp = new int[n+3];  // 为了避免下面给数组赋值时 若n<3 就容易出现数组越界 所以在这里多申请了3个空间来赋值dp初始条件
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2;   //
        for(int i= 3;i<= n;i++) 
        {
            dp[i] = dp[i-1] + dp[i-2] ;
            
        }
        return dp[n] ;        
    }
}

        


猜你喜欢

转载自blog.csdn.net/wx734518351/article/details/80473328