zoukankan      html  css  js  c++  java
  • LeetCode

    Description

    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.

    Solution

    为了方便理解,这里n从1开始,f(n)表示在剩余n个台阶时所有可能的方案数

    n=1,f(n)=1
    n=2,f(n)=2
    n=3,f(n)=3
    n=4,f(n)=5

    利用枚举抽象出一般表达式(n≥3)

    f(3)=f(2)+f(1)
    f(4)=f(3)+f(2)

    这里,设置两个变量

    one_step_last表示剩余1个台阶时可选的方案数,显然,只有1种;

    two_step_last表示剩余2个台阶时可选的方案数,可以走两个one-step,也可以走一个two-step leap,因此,共有2种;

    以n=3为例,此时有两种选择:

    1. 一步走1个台阶,走完之后,情况与f(2)相同
    2. 一步走2个台阶,走完之后,情况与f(1)相同

    因此,对于f(3),可选方案数为all_ways = one_step_last + two_step_last,即f(3)=f(2)+f(1)

    对于n≥4的情况,直接套用上述一般表达式即可

    f(4)=f(3)+f(2)
    f(5)=f(4)+f(3)

    友情提示:
    对于代码中的循环语句,我的理解是:

    all_ways = one_step_last + two_step_last
    表示当前n=4对应的f(4)

    one_step_last = two_step_last
    two_step_last = all_ways
    则对应于下一个循环情况,即n=4+1=5对应的f(3)和f(4)

    说起来有点绕口,还请各位看官细细品味,如有错误,恳请指正!

    python

     1 class Solution(object):
     2     countList = []
     3     def climbStairs(self, n):
     4         """
     5         :type n: int
     6         :rtype: int
     7         """
     8         if n == 1:
     9             return 1
    10         if n == 2:
    11             return 2
    12 
    13         one_step_last = 1
    14         two_step_last = 2
    15         all_ways = 0
    16 
    17         while n > 2:
    18             all_ways = one_step_last + two_step_last
    19             one_step_last = two_step_last
    20             two_step_last = all_ways
    21             n = n-1
    22 
    23         return all_ways

    cpp

     1 class Solution {
     2 public:
     3     int climbStairs(int n) {
     4         if (n==1) return 1;
     5         if (n==2) return 2;
     6 
     7         int one_step_last = 1;
     8         int two_step_last = 2;
     9         int all_ways = 0;
    10 
    11         for (int i=3; i<=n; ++i)
    12         {
    13             all_ways = one_step_last + two_step_last;
    14             one_step_last = two_step_last;
    15             two_step_last = all_ways;
    16         }
    17 
    18         return all_ways;
    19     }
    20 };

    Reference

  • 相关阅读:
    【Nginx】--Linux服务器中配置Nginx一个域名访问多个项目
    【node】-- express 热部署,修改不重新启动
    typora快捷键
    简单工厂模式
    软件设计七大原则
    Spring:事务的传播行为
    Spring:MVC执行流程
    Spring:beanfactory中循环依赖和命名重复
    Spring:MVC启动时的WebApplicationContext的关系
    Spring:如何实现注解的组合
  • 原文地址:https://www.cnblogs.com/gxcdream/p/7500625.html
Copyright © 2011-2022 走看看