解法
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.递推公式求解
离散数学相关内容
举个例子:若递推公式为 ,那么特征方程为
。解出
r1 = 2,r2 = -1。这样的话,,用待定系数法带入已知的an,求出系数b和c。