【剑指offer】变态跳台阶 --Java实现
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
输入
3
返回值
4
思路分析
设跳到第n阶的跳法共有f(n)种
假设现在已经跳到了第n阶,那么前一步跳到哪里了呢?
如果前一步跳一步到了第n阶,说明上一步在第n-1阶,已知跳到第n-1阶共有f(n-1)种跳法
如果前一步跳两步到了第n阶,说明上一步在第n-2阶,已知跳到第n-2阶共有f(n-2)种跳法
......
如果前一步跳n步到了第n阶,说明上一步在第0阶,已知跳到第0阶共有f(0)种跳法
所以f(n)=f(n-1)+f(n-2)+...+f(0)
同理f(n-1)=f(n-2)+f(n-3)+..+f(0)
所以f(n)=2f(n-1)
核心代码
public class Solution { public int JumpFloorII(int target) { if(target==0||target==1) return 1; int sum = 0; int f1 = 1; for(int i=2;i<=target;i++){ sum=2*f1; f1=sum; } return sum; } }
浙公网安备 33010602011771号