剑指offer 9、 变态跳台阶 python和c++

题目:

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

其实这个我也在 青蛙跳台阶 里面写过,这儿在分析一遍

思路:

           要跳上第 n 级台阶,可以从第 n−1级台阶一次跳上来,也可以可以从第 n−2级台阶一次跳上来,也可以可以从第 n−3级台阶一次跳上来,…,也可以可以从第 1 级台阶一次跳上来。那么问题就很简单啦,同样的,令 f(n) 表示从第一级台阶跳上第 n 级台阶有几种跳法。则有如下公式:
                                               f(n)=f(n−1)+f(n−2)+...+f(1)
同时,f(n−1) 也可以表示如下:
                                               f(n−1)=f(n−2)+f(n−3)+...+f(1)

所以,由上面两个公式可知:
                                               f(n)=2f(n−1)
那么,替换一哈,用n-1代替n,则有:
                                               f(n-1)=2f(n-2)

所以
                                               f(n)=21f(n−1)=22f(n-2)=23f(n−3)=...=2(n−1)f(n−(n−1))=2(n−1)f(1)

因为 f(1)=1,所以 f(n)=2(n−1)f(1)=2(n−1)

完成。

c++版

class Solution {
public:
    int jumpFloorII(int number) {
        return 1<<(number-1);
    }
};

python版

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

主要是理解过程。

posted on 2021-06-10 17:22  雾恋过往  阅读(63)  评论(0编辑  收藏  举报

Live2D