爬楼梯 python的三种方法实现 &leetcode

解法

1.动态规划 滚动数组思想

class Solution(object):
    def climbStairs(self, n):
        if n==1:
            return 1
        if n==2:
            return 2
        a = 1
        b = 2
        c = 3
        for i in range(3,n+1):
            c = a+b
            a = b
            b = c
        return c

2.矩阵运算

class Solution(object):
    def climbStairs(self, n):
        if n==1 or n==2:
            return n
        an = [2,1]
        A = [[1,1],[1,0]]
        for i in range(3,n+1):
            an = [A[0][0]*an[0]+A[0][1]*an[1],A[1][0]*an[0]+A[1][1]*an[1]]
        return an[0]

3.递推公式

这里在带入时,带入的是a1 = 1和a2 = 1,是斐波那契数列的前两项。但这里实际上是a1 = 1,a2 = 2,是从斐波那契数列的第二三项开始的,所以这里最后求解时要用n+1来开方。

import math
class Solution(object):
    def climbStairs(self, n):
        if n==1 or n==2:
            return n
        x1 = (1+math.sqrt(5))/2
        x2 = (1-math.sqrt(5))/2
        an = 1/math.sqrt(5)*(pow(x1,n+1)-pow(x2,n+1))
        return int(an)

知识点后记

1.函数中self用法

访问实例属性:通过self关键字,可以在类的方法中访问同一个实例的属性。

如果在__init__构造函数中初始化了一个属性,那么可以在其他方法中通过self来访问这个属性

class Example:
    def __init__(self, value):
        self.value = value  # 设置实例属性

    def print_value(self):
        print(self.value)  # 使用self访问实例属性

调用实例方法self允许在类的一个方法内调用同一个实例的另一个方法

class Example:
    def method_one(self):
        print("Method One")

    def method_two(self):
        self.method_one()  # 调用同一个实例的另一个方法

2.递推公式求解

离散数学相关内容

举个例子:若递推公式为 a_n = a_{n-1}+2a_{n-2} ,那么特征方程为 r^2-r-2=0。解出

r1 = 2,r2 = -1。这样的话,a_n = b*2^n + c*(-1)^n,用待定系数法带入已知的an,求出系数b和c。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值