[LeetCode] 70. Climbing Stairs 爬楼梯

Posted 轻风舞动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 70. Climbing Stairs 爬楼梯相关的知识,希望对你有一定的参考价值。

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

解题思路:

动态规划DP(Dynamic Programming)入门题。

state: dp[i] 表示爬到第i个楼梯的所有方法的和
function: dp[i] = dp[i-1] + dp[i-2]  //因为每次走一步或者两步, 所以f[i]的方法就是它一步前和两步前方法加和
initial: dp[0] = 0; dp[1] = 1
end : return f[n]


Java: Method 1: Time: O(n), Space: O(n)

public int climbStairs(int n) {
    int[] dp = new int[n + 1];
    dp[0] = 1;
    dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];    
}

Java: Method 2: Time:  O(n), Space: O(1) 

public int climbStairs(int n) {
    if (n == 0 || n == 1 || n == 2){
        return n;
    }
    int [] dp = new int[3];
    dp[1] = 1;
    dp[2] = 2;
    for (int i =3; i <= n; i++) {
        dp[i%3] = dp[(i-1)%3] + dp[(i-2)%3];
    }
    return dp[n%3];
}

Java: Method 3: Time:  O(n), Space: O(1)

public class Solution {
    public int climbStairs(int n) {
        int[] dp = new int[]{0,1,2};
        if(n < 3) return dp[n];
        for(int i = 2; i < n; i++){
            dp[0] = dp[1];
            dp[1] = dp[2];
            dp[2] = dp[0] + dp[1];
        }
        return dp[2];
    }
}

Python:

class Solution:
    # DP   Time: O(n) Space: O(1)
    def climbStairs(self, n):
        prev, current = 0, 1
        for i in xrange(n):
            prev, current = current, prev + current, 
        return current

    # Recursion   Time:  O(2^n) Space: O(n)
    def climbStairs1(self, n):
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n - 1) + self.climbStairs(n - 2)

  

  

  

 

 





以上是关于[LeetCode] 70. Climbing Stairs 爬楼梯的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 70. Climbing Stairs

Leetcode-70 Climbing Stairs

Leetcode 70 Climbing Stairs

[Leetcode 70]: Climbing Stairs

[leetcode]70.Climbing Stairs

LeetCode 70. Climbing Stairs