剑指offer刷题记录之变态跳台阶

1. 题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

2. 解题

2.1 画图分析

和上一题跳台阶一样,我们画出前几种情况,对图一分析就可以看出规律:
f ( n ) = f ( n 1 ) + f ( n 2 ) + . . . + f ( 1 ) f(n)=f(n-1)+f(n−2)+...+f(1)
​​​​​ f ( n 1 ) = f ( n 2 ) + + f ( 1 ) f(n-1)=f(n-2)+…+f(1)

2.2 代码

class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number == 1:
            return 1
        elif number == 2:
            return 2
        elif number > 2:
            res = 1
            for i in range(1, number):
                res = res + self.jumpFloorII(i)
            return res

3. 优化

3.1 分析

f ( n ) = f ( n 1 ) + f ( n 2 ) + . . . + f ( 1 ) f(n)=f(n-1)+f(n−2)+...+f(1)
​​​​​ f ( n 1 ) = f ( n 2 ) + + f ( 1 ) f(n-1)=f(n-2)+…+f(1)
两式相减得:
f ( n ) = 2 f ( n 1 ) = 4 f ( n 2 ) = . . . = 2 n 1 f ( 1 ) f(n)=2f(n-1)=4f(n-2)=...=2^{n-1}f(1)

3.2 代码

class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number == 1:
            return 1
        elif number == 2:
            return 2
        elif number > 2:
            return pow(2, number-1)
发布了49 篇原创文章 · 获赞 104 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/xijuezhu8128/article/details/104717145