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?
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
f(1) = 1
f(2) = 2
f(3) = f(n-1)+f(n-2)
f(t) = f(t-1)+ f(t-2)
递归超时::
1 class Solution { 2 public int climbStairs(int n) { 3 if(n<3) return n; 4 return climbStairs(n-1) + climbStairs(n-2); 5 } 6 }
动态规划!!!!
1 class Solution { 2 public int climbStairs(int n) { 3 int dp[] = new int[n+1]; 4 for(int i=0;i<=n;i++){ 5 if(i<3) 6 dp[i] = i; 7 else 8 dp[i] = dp[i-1]+dp[i-2]; 9 } 10 return dp[n]; 11 } 12 13 }
Fibonacci Number:
1 class Solution { 2 public int climbStairs(int n) { 3 if(n<3) return n; 4 int t1 = 1; 5 int t2 = 2; 6 int t3; 7 for(int i=2;i<n;i++){ 8 t3 = t1+t2; 9 t1 = t2; 10 t2 = t3; 11 } 12 return t2; 13 } 14 15 }