Leetcode70. 爬楼梯

  • 题目要求:

image.png

  • 思路1:python

    • 定义数组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