1 """ 2 You are climbing a stair case. It takes n steps to reach to the top. 3 Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 4 Note: Given n will be a positive integer. 5 Example 1: 6 Input: 2 7 Output: 2 8 Explanation: There are two ways to climb to the top. 9 1. 1 step + 1 step 10 2. 2 steps 11 Example 2: 12 Input: 3 13 Output: 3 14 Explanation: There are three ways to climb to the top. 15 1. 1 step + 1 step + 1 step 16 2. 1 step + 2 steps 17 3. 2 steps + 1 step 18 """ 19 """ 20 共有三种解法 21 解法一:递归,判题器超时 22 解法二:斐波拉契数列 23 解法三:维护一个数组,循环相加 24 解法二和三的时间复杂度都为O(n),但解法二的空间复杂度更低。 25 """ 26 """ 27 解法一: 28 Time Limit Exceeded 29 Last executed input 38 30 """ 31 class Solution1: 32 def climbStairs(self, n): 33 if n == 1: 34 return 1 35 if n == 2: 36 return 2 37 return self.climbStairs(n-1) + self.climbStairs(n-2) 38 """ 39 解法二 40 """ 41 class Solution2: 42 def climbStairs(self, n): 43 if n == 1: 44 return 1 45 if n == 2: 46 return 2 47 first = 1 48 second = 2 49 res = 0 50 for i in range(3, n+1): 51 res = first + second 52 first = second 53 second = res 54 return res 55 """ 56 解法三 57 """ 58 class Solution3: 59 def climbStairs(self, n): 60 res = [0]*(n+1) 61 if n == 1: 62 return 1 63 if n == 2: 64 return 2 65 res[1] = 1 66 res[2] = 2 67 for i in range(3, n+1): 68 res[i] = res[i-1] + res[i-2] 69 return res[n]