题目要求:思路一:定义一个数组num,其长度为给定n的长度。如果n大于1,则将num[0]赋值为1,因为只有一种方法可以走到第一步,即如果n大于2,则走一步,num[1]赋值为2,即进入第二步有两种方式,第一种是走一步,然后再走一步,第二种是直接走两步然后循环遍历数组,从最下面标记的位置是2开始遍历,也就是往上走第三步,可以是从第二步往上走一步,也可以是从第一步往上走一步,那么第三步的方法就是第二步的方法了添加第一步的方法,即num[i]的步数是num[i-1]和num[i-2]的和。最后,返回数组最后一个元素的值。核心代码:#初始化数组,可以是0,可以是Nonenum=[0]*n#如果n大于等于1,那么有一种方法可以走第一步,就是走一步ifn>=1:num[0]=1#如果步数大于等于2,有两种方式进行第二步ifn>=2:num[1]=2#之后第二步该步可以通过本步前两步的方法数之和计算得到foriinrange(2,n):num[i]=num[i-1]+num[i-2]#返回结果returnnum[-1]completecode:classSolution:defclimbStairs(self,n:int)->int:num=[0]*nifn>=1:num[0]=1ifn>=2:num[1]=2foriinrange(2,n):num[i]=num[i-1]+num[i-2]returnnum[-1]思路二:与思路一相比,其实就到了第n步,只需要知道第n-1步和n-2步的方法个数。之前保存的所有值都不重要,所以维护一个pre,用来保存上一步的方法数和初始值。赋0维护一个cur,用来保存当前步走上一步的方法number,循环遍历的初始值为1,遍历到当前步的方法个数为pre+cur,在此之前,必须先将pre赋值给cur,python有个特点,两个变量可以直接交换,看详细代码核心代码:pre,cur=0,1foriinrange(n):pre,cur=cur,pre+currentcur完整代码:classSolution:defclimbStairs(self,n:int)->int:pre,cur=0,1foriinrange(n):pre,cur=cur,pre+cur返回cur
