力扣 算法爬楼梯 最最直观的Python 题解 附详细解题思路及注释(超简单 新手友好)

1.题目描述:

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

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

2.示例 :

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

3.详细思路:

从个例推出通解:
n=1:走1步,有1种解法
n=2:可以走1+1步,也可以直接走2步,2种解法
n=3:可以走的方式有:1+1+1,1+2,2+1,共3种
n=4:走法有1+1+1+1,1+2+1,2+1+1,1+1+2,2+2,共5种
n=5:走法有1+1+1+1+1,1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1,2+2+1,1+2+2,2+1+2,共8种
规律:1,2,3,5,8......,从第3项开始,当前项的值就是前面两项的和,即著名的斐波那契数列

4.代码:
class Solution(object):
    def climbStairs(self, n):
   
        # n小于等于2时,直接返回n
        if n<=2:
            return n
        # 初始化前两项
        a,  = 1, 2
        # 从第三项开始遍历,由于n算在结果中,故range第二个数为n+1,range数组范围为左闭右开,故区间为[3, n+1)
        for i in range(3, n+1):
            # 节省空间,不使用dp数组,下面附使用列表的方法
            # 设n为4,则有i=3:p, q = q, (p+q) = 2, 3;i=4: p, q = q, (p+q) = 3, 5,故结果为5
            p, q = q, (p+q)
        return q

————————————————————-——————————————————————

下面将介绍使用列表的方法:

class Solution:
    def climbStairs(self, n: int) -> int:
        if n<=3:
            return n
        s = [0 for i in range(n)]
        s[0] = 1
        s[1] = 2
        for i in range(2, n):
            s[i] = s[i - 1] + s[i - 2]
        return s[n-1]

猜你喜欢

转载自blog.csdn.net/m0_62690134/article/details/129911045
今日推荐