题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
f(1) = 1
f(2) = f(2-1) + f(2-2)
f(3) = f(3-1) + f(3-2) + f(3-3)
…
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)
递归
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number<=2:
return number
else:
return 2*self.jumpFloorII(number-1)
public class Solution {
public int JumpFloorII(int target) {
if (target<=2)
return target;
else
return 2*JumpFloorII(target-1);
}
}
非递归
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number<=2:
return number
nums=[0 for i in range(number+1)]
nums[0],nums[1],nums[2]=0,1,2
for i in range(3,number+1):
nums[i]=nums[i-1]+nums[i-1]
return nums[number]
public class Solution {
public int JumpFloorII(int target) {
if (target<=2)
return target;
int nums[]=new int[target+1];
nums[0]=0;
nums[1]=1;
nums[2]=2;
for(int i=3;i<=target;i++)
nums[i]=2*nums[i-1];
return nums[target];
}
}