最近开始苦读算法,遇到这个很有意思的题目,因为从中复习了斐波那契数列,通过某资料,找到了中科院官网,阅读很多科普文章。深入挖掘,你会看到很多东西。本着热爱分享的初衷,我整理了这篇文章,分享给大家。题目本身并不难。欢迎相互交流。感谢您的帮助。转到主题。本题为LeetCode第70题ClimbingStairs,题目如下:假设你正在爬楼梯。需要走n步才能到达建筑物的顶部。您一次可以爬1或2个台阶。您可以通过多少种不同的方式到达建筑物的顶部?你可以先考虑一下。流程分析这道题可以每次走一级,也可以一次走两级,所以我们会有3种走法:全程任意走,比如全1级;前面随机走,最后一步只走1级;前面任意走,最后一步只走2级;为了大家理解,我画了几张图,如下:第一种走路方式就不详细介绍了。第二种移动方法,倒数第二步的方法如下,有1步和2步两种方式;第三种移动方法,倒数第二步的方法如下,也有1步和2步两种方式:上面的过程描述了从最后一层开始每一层的移动。最后一步有1步和2步两种方式,可以理解为只有1步或者2步才能到达最后一层。当最后一步为1步时,从第n-1层开始;当最后一步为2步时,从第n-2层开始;再理解一下这个过程,就是第n层的走棋次数是n-th1层和n-2层走棋次数的总和。如果还是不明白,可以再看看之前的图。归纳法分析当然,事情没有解决,归纳法就开始了。我们可以列出几种情况进行分析:步数,步数,步数,1112211,233111,12,21451111,112,121,211,225811111,1112,1121,1211,2111,221,212,122...可以发现一个简单的规律,当步数为n层时,它的步数为n-1层的步数加上n-2层的步数。记为:f(n)=f(n-1)+f(n-2)。1楼有1个固定动作;二楼2个固定动作;……5层的走法数等于4层的走法数加5层。了解了整个过程的规律之后,我们的代码就简单多了:方案一:循环累加计算通过简单的循环累加即可得到结果:constclimbStairs=(n=1)=>{if(n<=2)return名词;让res=0,n1=1,n2=2;//n1表示前2项,n2表示前1项for(leti=3;i<=n;i++){//前两项的值固定,所以从第3项res开始循环=n1+n2;n1=n2;n2=资源;}returnres;}测试6楼的步数:climbStairs(6);//13方案二:递归根据f(n)=f(n-1)+f(n-2)计算,这个方法比较简单:constclimbStairs=(n=1)=>{if(n<=2)返回n;returnclimbStairs(n-1)+climbStairs(n-2);}测试6楼的步数:climbStairs(6);//13这种方法比较简单易懂,但是递归比较耗时,LeetCode容易超时提示。方案三:利用数组的特性利用f(n)=f(n-1)+f(n-2)的规律,先预设前2项,然后开始循环,最后返回最后一项数组的项目:constclimbStairs=n=>{letresult=[1,2];对于(让i=2;i
