#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Author: Hongying_Lee
# @Time: 2020/3/30
# @Name: climbStairs


"""
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
注意：给定 n 是一个正整数。
示例 1：
输入： 2
输出： 2
解释： 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2：
输入： 3
输出： 3
解释： 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
"""


def climbStairs(n):
    res = [0, 1, 2]
    for i in range(3, n + 1):
        res.append(res[i - 1] + res[i - 2])
    return res[n]

def climbStairsNew(n):
    p,q,r = 0,0,1
    for i in range(n):
        p = q
        q = r
        r = p + q
    return r


if __name__ == '__main__':
    x = 5
    print(climbStairs(x))
    print(climbStairsNew(x))
