每日一题之跳台阶

跳台阶

问题描述:
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
要求:时间复杂度: O ( n ) O(n) O(n),空间复杂度: O ( 1 ) O(1) O(1)
我的想法就是:递归。
思路如下:假设 f [ i ] f[i] f[i] 表示在第 i i i 个台阶上可能的方法数。逆向思维。如果我从第 n n n 个台阶进行下台阶,下一步有 2 种可能,一种走到第 n − 1 n-1 n1个台阶,另一种时走到第 n − 2 n-2 n2 个台阶。所以 f [ n ] = f [ n − 1 ] + f [ n − 2 ] f[n]=f[n-1]+f[n-2] f[n]=f[n1]+f[n2]。初始条件: f [ 0 ] = f [ 1 ] = 1 f[0] = f[1] = 1 f[0]=f[1]=1。所以就变成了: f [ n ] = f [ n − 1 ] + f [ n − 2 ] f[n]=f[n-1]+f[n-2] f[n]=f[n1]+f[n2],初始值 f [ 0 ] = 1 f[0] = 1 f[0]=1 f [ 1 ] = 1 f[1] = 1 f[1]=1,目标求 f [ n ] f[n] f[n]
时间复杂度: O ( 2 N ) O(2^N) O(2N),空间复杂度:递归栈的空间。

def jumpFloor(self, number: int) -> int:
        # write code here
        if number == 1:
            return 1
        elif number == 2:
            return 2
        else:
            return self.jumpFloor(number - 1) + self.jumpFloor(number - 2)

方法二:动态规划
我琢磨感觉和递归很像,但是又不一样

class Solution:
    def jumpFloor(self, number: int) -> int:
        # write code here
        floorMethod = [1, 1]

        for i in range(2, number+1):
            floorMethod.append(floorMethod[i-1]+floorMethod[i-2])
        return floorMethod[number]

你可能感兴趣的:(python学习之路,算法,数据结构)