剑指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
主要是理解过程。