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:
1 2 3 4 5
| 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:
1 2 3 4 5 6
| 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
|
1 2 3 4 5 6
| f(1)=1 1 f(2)=2 11 2 f(3)=3 //f(1)+f(2) 111 12 21 f(4)=5 //f(2)+f(3) 1111 112 211 121 22 f(5)=8 //f(3)+f(4) 11111 2111 1211 1121 1112 221 122 212 f(n)=f(n-2)+f(n-1) Fibonacci
|
每次爬1或2格,有幾種方法可以到終點,一開始不知道就先把例子都列出來找規律,最後知道 f(n)=f(n-2)+f(n-1),這不是fiboncci嗎!知道規律就好辦了。
1 2 3 4 5 6 7
| T: O(n), S: O(1) class Solution: def climbStairs(self, n): a,b = 1,0 for _ in range(n): a,b = a+b,a return a
|