#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param number int整型 
# @return int整型
#
class Solution:
    def jumpFloor(self , number: int) -> int:
        # 递归形式:
        # if number <= 1:
        #     return 1
        # # 走上最后一梯只有两种方式,一种是从f(n-1)再向上跳一级,另一种是从f(n-2)再向上跳两级。所以最后一梯的跳法应该是前面两种跳法的总和。
        # return self. jumpFloor(number - 1) + self.jumpFloor(number - 2)

        # 初始状态
        # 只有一级台阶的时候只有一种跳法
        f1 = 1
        # 有2级台阶的时候有2种跳法
        f2 = 2
        if number == 1:
            return f1
        if number == 2:
            return f2
        # 从有1级台阶和2级台阶的情况向后递推。
        fn_jian_1 = f2
        fn_jian_2 = f1
        for _ in range(3, number+1):
            # 走上最后一梯只有两种方式,一种是从f(n-1)再向上跳一级,另一种是从f(n-2)再向上跳两级。所以最后一梯的跳法应该是前面两种跳法的总和。
            fn = fn_jian_1 + fn_jian_2
            fn_jian_2 = fn_jian_1
            fn_jian_1 = fn
        
        return fn