剑指Offer - 跳台阶 & 变态跳台阶 (C/C++, Java, Python 分别实现)

跳台阶-题目描述

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

思路:f(0)=0, f(1)=1, f(2)=2,  n>2时 状态转移方程为 f(n) = f(n-1) + f(n-2)

C/C++


Java



Python    运行时间:31ms    占用内存:5608k

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloor(self, number):
        # write code here
        ans = []
        ans.append(0)
        ans.append(1)
        ans.append(2)
        for i in range(3,100):
            ans.append(ans[i-1] + ans[i-2])
        return ans[number]



变态跳台阶-题目描述

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



C/C++


Java



Python

数学推倒 法    运行时间:30ms    占用内存:5604k

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        return 2**(number-1)

移位 法    运行时间:25ms    占用内存:5856k

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number == 0:
            return 0
        elif number == 1:
            return 1
        elif number == 2:
            return 2
        else:
            return 2<<(number-2)    //左移number-2位

猜你喜欢

转载自blog.csdn.net/m0_38024592/article/details/80494644