• 题目要求:

image.png

  • 思路1:

    • 定义数组num,长度为给定的n的长度
    • 如果n大于1,num[0]赋为1,因为走上第一个台阶只有一种方法,也就是迈一步
    • 如果n大于2,num[1]赋为2,也就是走上第二个台阶有两种方法,第一种是走一步,再走一步,第二种是直接走两步
    • 然后for循环遍历数组,从下标位置为2开始遍历,也就是上第三个台阶,可以是第二个台阶走一步,也可以是从第一个台阶走一步上来,那么第三个台阶的方法就是第二个台阶的方法加上第一个台阶的方法,也就是num[i]的台阶的方法数为num[i-1]与num[i-2]的和。
    • 最后返回数组最后一位元素的值即可
  • 核心代码:
# 初始化数组,可以为0,可以为None
num = [0] * n
# 如果 n 大于等于1,那么走第一个台阶的方法有一个,就是走一步
if n >= 1:
    num[0] = 1
    # 如果台阶数大于等于2,走第二个台阶的方法有两种
    if n >= 2:
        num[1] = 2
        # 第二个台阶之后的台阶就可以通过这个台阶的前两个台阶的方法数的和求来
        for i in range(2,n):
            num[i] = num[i-1] + num[i-2]
# 返回结果
return num[-1]
  • 完整代码:
class Solution:
    def climbStairs(self, n: int) -> int:
        num = [0] * n
        if n >= 1:
            num[0] = 1
            if n >= 2:
                num[1] = 2
                for i in range(2,n):
                    num[i] = num[i-1] + num[i-2]
        return num[-1]
  • 思路2:

    • 对比思路1,其实到台阶n,只有台阶n-1和n-2的方法数是需要知道的,之前保存的所有数值都是不重要的
    • 所以维护一个pre,用来保存走前一个的前一个台阶的方法数,初始值赋为0
    • 维护一个cur,用来保存走当前台阶的前一个台阶的方法数,初始值为1
    • for循环遍历,遍历到当前的台阶的方法数为pre+cur,在这之前,要先把pre赋给cur,python有一个特性就是两个变量可以直接进行交换,具体见代码
  • 核心代码:
pre , cur = 0 , 1
for i in range(n):
    pre , cur = cur , pre + cur
return cur
  • 完整代码:
class Solution:
    def climbStairs(self, n: int) -> int:
        pre , cur = 0 , 1
        for i in range(n):
            pre , cur = cur , pre + cur
        return cur

Adrianna
1 声望2 粉丝