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?
Note: Given n will be a positive integer.
Example 1:
Input: 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps
Example 2:
Input: 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 这很明显是个斐波那契数列,刚开始想用递归做,后来发现超时了,那就老老实实做斐波那契数列的推导就好了 代码如下:class Solution { public int climbStairs(int n) { if(n == 0 || n == 1|| n == 2){ return n; } int[] arr = new int[n+1]; arr[0] = 0; arr[1] = 1; arr[2] = 2; for(int i = 3;i <= n;i++){ arr[i] = arr[i-1] + arr[i -2]; } return arr[n]; } }