zoukankan      html  css  js  c++  java
  • [LintCode] Climbing Stairs

    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

    Given an example n=3 , 1+1+1=2+1=1+2=3

    return 3

    Solution 1. Recursion.

    f(n) = f(n - 1) + f(n - 2) 

     1 //Recursive DFS traverse, TLE
     2 public class Solution {
     3     private int count = 0;
     4     public int climbStairs(int n) {
     5         dfs(0, 1, n);
     6         dfs(0, 2, n);
     7         return count;
     8     }
     9     private void dfs(int stair, int steps, int n){
    10         int sum = stair + steps;
    11         if(sum == n){
    12             count++;
    13             return;
    14         }
    15         else if(sum > n){
    16             return;
    17         }
    18         dfs(sum, 1, n);
    19         dfs(sum, 2, n);
    20     }
    21 }

    Solution 2. Dynamic Programming

     Overlapping subproblems -> DP

     1 //DP O(n) time, O(n) space 
     2 public class Solution {
     3     public int climbStairs(int n) {
     4         if(n <= 1){
     5             return 1; 
     6         }
     7         int[] f = new int[n + 1];
     8         f[0] = 1; f[1] = 1;
     9         for(int i = 2; i <= n; i++){
    10             f[i] = f[i - 1] + f[i - 2];
    11         }
    12         return f[n];
    13     }
    14 }
     1 //DP O(n) time, O(1) space 
     2 public class Solution {
     3     public int climbStairs(int n) {
     4         if(n <= 1){
     5             return 1; 
     6         }
     7         int[] f = new int[2];
     8         f[0] = 1; f[1] = 1;
     9         for(int i = 2; i <= n; i++){
    10             f[i % 2] = f[(i - 1) % 2] + f[(i - 2) % 2];
    11         }
    12         return f[n % 2];
    13     }
    14 }

    Related Problems

    Climbing Stairs II

    Fibonacci 

    House Robber

    Decode Ways

  • 相关阅读:
    2019春季第五周作业
    2019春第四周作业(基础题)计算机
    2019第三周作业
    第二周基础作业
    2019春第九周作业
    2019年春第八周作业
    第七周总结
    第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/lz87/p/6951492.html
Copyright © 2011-2022 走看看