zoukankan      html  css  js  c++  java
  • Leetcode: 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?

     这道题目是求跑楼梯的可行解法数量。每一步可以爬一格或者两个楼梯,可以发现,递推式是f(n)=f(n-1)+f(n-2),也就是等于前一格的可行数量加上前两格的可行数量。熟悉的朋友可能发现了,这个递归式正是斐波那契数列的定义. 这里base case 是f(1)=1, f(2)=2. Fibonacci是典型的动态规划问题,用Recursion和Iteration都可以,下面列举了Code Ganker写的Iterative解法:

     1 public int climbStairs(int n) {
     2     int f1 = 1;
     3     int f2 = 2;
     4     if(n==1)
     5         return f1;
     6     if(n==2)
     7         return f2;
     8     for(int i=3;i<=n;i++)
     9     {
    10         int f3 = f1+f2;
    11         f1 = f2;
    12         f2 = f3;
    13     }
    14     return f2;
    15 }

    用Recursion要小心,比如这种:

     1 public class Solution {
     2     public int climbStairs(int n) {
     3         if (n<=0)
     4         return 0;
     5         if (n==1)
     6         return 1;
     7         if (n==2)
     8         return 2;
     9         return climbStairs(n-1)+climbStairs(n-2);
    10     }
    11 }

    这个递归是指数量级的,n大了会超时~ 你递归还是应该用动态规划来实现~ 也就是要保存历史信息,然后传下去哈~

  • 相关阅读:
    [每日短篇] 1C
    项目Alpha冲刺 Day12
    项目Alpha冲刺 Day12
    [转载]MVC中单用户登录
    GitLab
    Git 版本控制
    Jenkins持续集成
    Jenkins安装
    Docker 网络基础原理
    java中内存的使用
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/3738086.html
Copyright © 2011-2022 走看看