剑指offer 66道-python+JavaScript
变态跳台阶
时间限制:1秒 空间限制:32768K 热度指数:298217
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
第一次跳1个台阶,剩下的数目是f(n-1)
第一次跳2个台阶,剩下的数目是f(n-2)
…
第一次跳n-2个台阶,剩下的数目是f(2)=2
第一次跳n-1个台阶,剩下的数目是f(1)=1
第一次跳n个,数目直接是1次
f(n)=f(n-1)+f(n-2)+f(n-3)+…f(2)+f(1)+1
f(n)=f(n-1)=f(n-1)
即:f(n)=2f(n-1)
github
python代码链接: https://github.com/seattlegirl/jianzhioffer/blob/master/climbing-staris-big.py.
题目代码(python)
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number<=0:
return 0
if number==1:
return 1
if number==2:
return 2
result=[0]*(number+1)
result[0]=0
result[1]=1
result[2]=2
for i in range(3,number+1):
result[i]=2*result[i-1]
return result[number]
if __name__ == "__main__":
print(Solution().jumpFloorII(3))
github
JavaScript代码链接: https://github.com/seattlegirl/jianzhioffer/blob/master/climbing-staris-big.js.
题目代码(JavaScript)
function jumpFloorII(number)
{
// write code here
//第一次跳1个台阶,剩下的数目是f(n-1)
//第一次跳2个台阶,剩下的数目是f(n-2)
//......
//第一次跳n-2个台阶,剩下的数目是f(2)=2
//第一次跳n-1个台阶,剩下的数目是f(1)=1
//第一次跳n个,数目直接是1次
//f(n)=f(n-1)+f(n-2)+f(n-3)+......f(2)+f(1)+1
//f(n)=f(n-1)=f(n-1)
//f(n)=2f(n-1)
var result=new Array(number+1);
if(number<=0){
return 0;
}
if(number===1){
return 1;
}
if(number===2){
return 2;
}
result[0]=0;
result[1]=1;
result[2]=2;
for(var i=3;i<=number;i++){
result[i]=2*result[i-1];
}
return result[number]
}
console.log(jumpFloorII(3));