LeetCode打卡第七天(70、爬楼梯问题easy)

坚持是人类伟大的品质

目录

一、爬楼题问题

1、题目:

示例 1:

示例 2:

提示:

2、思路:

具体想法:

斐波那契数列:

3、代码:


一、爬楼题问题

1、题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶


示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶



提示:

1 <= n <= 45

2、思路:

具体想法:

首先如果楼梯有一层,那方法就只有一种

如果楼梯有两层,那么方法有两种

.............................................................

如果楼梯有n层,往下细分,其实有两种方法,从n-1层走一步上来,或者从n-2层走两步上来的,

所以我们把问题看成到达第 n-2 阶时所有方式加上到达第n-1阶时所有方式就是到达第n阶的所有方式。那到n-1层又有两种方法,到n-2层又有两种方法.....

如果f(1)=1,f(2)=2,f(3)=3,f(4)=5......f(n)=f(n-1)+f(n-2)

斐波那契数列:

1,1,2,3,5,8,13...这样一个数列就是斐波那契数列,求第n项的值。

观察数列可得,除了第一项和第二项,所有的数列的值都是前一项和前一项的前一项的加和,转换成函数也就是f(n) = f(n-1) + f(n-2)

有兴趣的可以看看数列的三种求法:

求斐波那契数列的三种方法_风一样的美代码的博客-CSDN博客

3、代码:

第一次写出来的代码是

class Solution(object):

    def climbStairs(self, n):

        """

        :type n: int

        :rtype: int

        """

        if n<=2:

            return n

        if n>2:

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

            return n

 出现了错误,查询之后,应该是self参数出了错误:(可以看看这个文章)

在leetcode中,为什么会出现错误“NameError:未定义全局名称‘爬楼梯’”?但是在没有“自我”和“客体”的情况下工作? - 问答 - Python中文网

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n<=2:
            return n
        if n>2:
            return self.climbStairs(n-1)+self.climbStairs(n-2)
            

   

 在提交的时候,发现这个代码运行时间过长,我们可以采用另一种方法,不调用:

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 1 :
            return 1
        if n == 2 :
            return 2
        
        step1 = 1
        step2 = 2
        for i in range(3,n+1):
            now = step1 + step2
            step1 = step2
            step2 = now
        return now

猜你喜欢

转载自blog.csdn.net/m0_51786204/article/details/129899623