题意:有n级楼梯,你一次可以爬一级或两级,问爬上n级楼梯有多少种爬法。
分析: n 表示楼层 f(n) 表示 到达n层一共有多少种方法
n=1 f(1)=1 [1]
n=2 f(2)=2 [1 1] [2]
n=3 f(3)=3 [1 1 1] [1 2] [2 1]
n=4 f(4)=5 [1 1 1 1] [1 2 1] [2 1 1] [1 1 2] [2 2]
规律: f(n) = f(n-1) + f(n-2)
本质是斐波那契数列 递推式 dp[x] = dp[x-1] + dp[p-2]
补充斐波那契数列:
数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
实现:
C++版:
int climbStairs(int n)
{
if (n==1) return 1;
if (n==2) return 2;
int CSone = 1;
int CStwo = 2;
int CS = 0;
for(int k=2; k<=n; k++)
{
CS = CSone + CStwo;
CSone = CStwo;
CStwo = CS;
}
return CS;
}
Python版:
def climbStairs(n):
if n==1:
return 1
if n==2:
return 2
t = [1,1] # 结果存放在一个list中
i = 2 #变量初始值限定
if n >=2: # 最大阈值初始值限定
while i <= n:
t.append(t[i-1] + t[i-2])
i +=1
return t[-1]
reference:
python: https://blog.youkuaiyun.com/wxd_zswx/article/details/50188207
博客围绕爬楼梯问题展开,分析了爬n级楼梯(每次可爬一级或两级)的不同爬法数量。通过列举不同n值下的爬法,得出规律f(n) = f(n - 1) + f(n - 2),本质是斐波那契数列,还给出了其定义,并提及C++和Python版实现。
235

被折叠的 条评论
为什么被折叠?



