LeetCode 솔루션					분류
				
						[Easy - wk3 - Q2] 70. Climbing Stairs
본문
You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps
Example 2:
Input: n = 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step
Constraints:
- 1 <= n <= 45
				태그
				#leetcode, #문제풀이, #easy, #amazon, #microsoft, #expedia, #uber, #google, #adobe, #yahoo, #oracle, #goldman sachs, #bloomberg, #apple, #intel, #math, #dynamic programming, #memoization			
			관련자료
- 
			링크
			댓글 4
					
			Jack님의 댓글
- 익명
- 작성일
					
										
					python
Time Limit Exceeded
*** Memoization ***
Runtime: 32 ms, faster than 83.88% of Python3 online submissions for Climbing Stairs.
Memory Usage: 13.8 MB, less than 58.27% of Python3 online submissions for Climbing Stairs.
*** Tabulation ***
Runtime: 60 ms, faster than 9.43% of Python3 online submissions for Climbing Stairs.
Memory Usage: 13.9 MB, less than 58.27% of Python3 online submissions for Climbing Stairs.
				
													
								Time Limit Exceeded
class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n-1) + self.climbStairs(n-2)*** Memoization ***
Runtime: 32 ms, faster than 83.88% of Python3 online submissions for Climbing Stairs.
Memory Usage: 13.8 MB, less than 58.27% of Python3 online submissions for Climbing Stairs.
class Solution:
    dp = collections.defaultdict(int)
    
    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n
        
        if self.dp[n]:
            return self.dp[n]
        
        self.dp[n] = self.climbStairs(n-1) + self.climbStairs(n-2)
        return self.dp[n]
        *** Tabulation ***
Runtime: 60 ms, faster than 9.43% of Python3 online submissions for Climbing Stairs.
Memory Usage: 13.9 MB, less than 58.27% of Python3 online submissions for Climbing Stairs.
class Solution:   
    def climbStairs(self, n: int) -> int:
        dp = collections.defaultdict(int)
        dp[1]=1
        dp[2]=2
        
        for i in range(3, n+1):
            dp[i]=dp[i-1]+dp[i-2]
        return dp[n]mingki님의 댓글
- 익명
- 작성일
					
										
					C++
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Climbing Stairs.
Memory Usage: 5.8 MB, less than 83.45% of C++ online submissions for Climbing Stairs.
				
													
								Runtime: 0 ms, faster than 100.00% of C++ online submissions for Climbing Stairs.
Memory Usage: 5.8 MB, less than 83.45% of C++ online submissions for Climbing Stairs.
class Solution {
public:
    int climbStairs(int n) {
        int curr = 1, prev = 0;
        for (int i = 1; i <= n; ++i) {
            curr += prev, prev = curr - prev;
        }
        return curr;
    }
};dawn27님의 댓글
- 익명
- 작성일
					
										
					Runtime: 77 ms, faster than 47.02% of JavaScript online submissions for Climbing Stairs.
Memory Usage: 42 MB, less than 34.99% of JavaScript online submissions for Climbing Stairs.
				
													
								Memory Usage: 42 MB, less than 34.99% of JavaScript online submissions for Climbing Stairs.
var climbStairs = function(n) {
    let counterFunc = (stairsRemaining, savedResult) => {    
        if (stairsRemaining < 0) return 0;
        if (stairsRemaining === 0) return 1;
        if (savedResult[stairsRemaining]) return savedResult[stairsRemaining];
        savedResult[stairsRemaining] = counterFunc(stairsRemaining-1, savedResult) + counterFunc(stairsRemaining-2, savedResult);
        return savedResult[stairsRemaining];
    }
    return counterFunc(n, {});
}; 
								 
							







