• LintCode Python 简单级题目 111.爬楼梯 (斐波纳契数列 青蛙跳)


    题目描述:

    假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

    比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法

    返回 3

    标签 
     
    题目分析:

    **设f(n)为n阶台阶的情况下,所有不同的跳法方法的总和!**
    1.如果起始跳一阶的话,剩余的n-1阶就有 f(n-1) 种跳法;
    2.如果起始跳二阶的话,剩余的n-2阶就有 f(n-2) 种跳法;
    所以f(n) = f(n-1) + f(n-2),实际结果即为斐波纳契数。

    源码:

    class Solution:
        """
        @param n: An integer
        @return: An integer
        """
        def climbStairs(self, n):
            # write your code here
            if n == 0: return 1
            if n == 1: return 1
            
            tmpList = [1,1]
            for i in range(0,n-1):
                x = tmpList[-1] + tmpList[-2]
                tmpList.append(x)
            return tmpList[-1]
    

      

    **进阶** 

    如果某人可以一次性跳1~n阶,那他跳完n阶台阶有多少种跳法?

    **设f(n)为n阶台阶的情况下,所有不同的跳法方法的总和!**
    1.如果起始跳一阶的话,剩余的n-1阶就有 f(n-1) 种跳法;
    2.如果起始跳二阶的话,剩余的n-2阶就有 f(n-2) 种跳法;
    3.如果起始跳三阶的话,剩余的n-2阶就有 f(n-3) 种跳法;

    ...
    n.如果起始跳n阶的话,剩余的n-2阶就有 f(n-n) 种跳法;

    假定f(0) = 1,已知一阶台阶时,跳法只有一种,所以f(1) = 1
    所以f(2) = 1+1 = 2


    得:  f(n) = f(n-1)+f(n-2)+f(n-3)...+...+f(n-(n-1))+f(n-n)

            f(n) = f(n-1)+f(n-2)+f(n-3)+...+f(0)

    又:  f(n-1) = f(n-2)+f(n-3)...+...+f(0)
        f(n-2) = f(n-3)+f(n-4)...+...+f(0)

    则:  f(n) = 2 * f(n-1)

           = 2^2 * f(n-2)

            = 2^(n-2) * f(2) 

    **最终结果f(n) = 2^(n-1) **

    class Solution:
        """
        @param n: An integer
        @return: An integer
        """
        def climbStairs(self, n):
            # write your code here
            if n == 0: return 1
            return 2**(n-1) 
  • 相关阅读:
    OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画圆
    OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画线段
    GIT 4 (标签)
    用户组 vim yum
    Git (提交版本及版本回退)
    GIT服务器的搭建
    GIT 2 (工作区,暂存库,版本库对比)
    用户的管理
    文档搜索
    GIT 3 (推送与克隆 及 分支管理)
  • 原文地址:https://www.cnblogs.com/bozhou/p/6933209.html
Copyright © 2020-2023  润新知