您的位置:首页 > Web前端

《剑指offer2》问题10 青蛙跳台阶&&变态跳台阶 Java实现

2017-08-24 12:32 489 查看

题目来源:剑指offer

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

思路:斐波那契。动态规划
public class Solution {
public int JumpFloor(int target) {
//dp
if(target<=0)
return 0;
int dp[]=new int[target];
dp[0]=1;
if(target==1)
return dp[0];
dp[1]=2;
for(int i=2;i<target;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[target-1];
}
}
2.
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:f(n)=2^(n-1)
public class Solution {
public int JumpFloorII(int target) {
if(target<=0)
return 0;
if(target==1)
return 1;
return 2<<target-2;//f(n)=2^n-1;

}
}

3.矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
public class Solution {
public int RectCover(int target) {
if(target<1)
return 0;
if(target==1)
return 1;
int dp[]=new int[target];
dp[0]=1;
dp[1]=2;
for(int i=2;i<target;i++)
dp[i]=dp[i-1]+dp[i-2];
return dp[target-1];

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息