剑指offer-跳台阶and变态跳台阶and矩形覆盖-Java
2018-03-23 08:56
525 查看
1.跳台阶
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路解析:
跳台阶问题是斐波那契数列,所以还是比较简单的,把前面几种情况列出来以后,然后使用for循环就可以写出来了。
代码:public class Solution {
public int JumpFloor(int target) {
if(target == 0)
return 0;
else if(target == 1){
return 1;
}else if(target == 2){
return 2;
}
else if(target == 3){
return 3;
}
int a=2;
int b=3;
int c=0;
for(int i=4;i<=target;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
}2.变态跳台阶
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路解析:
f(1)=1;
f(2)=2;
f(3)=4
f(4)=f(1)+f(2)+f(3)=2f(3)
f(5)=f(1)+f(2)+f(3)+f(4)=2f(4)
f(n)=2f(n-1)=2*2*f(n-2)=……=2^n
代码:public class Solution {
public int JumpFloorII(int target) {
if(target<=0){
return 0;
}else if(target==1){
return 1;
}else if(target==2){
return 2;
}else if(target==3){
return 4;
}
int a=4;
for(int i=4;i<=target;i++){
a=a*2;
}
return a;
}
}3.矩形覆盖
题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路解析:
第一种是竖着放置,剩下的就是f(n-1)种方法了,第二种是横着放置,就是f(n-2)种方法了。递归和循环的方法,也是分治法。图片来自https://blog.csdn.net/fengsser/article/details/46691801
代码:public class Solution {
public int RectCover(int target) {
if(target<=0){
return 0;
}else if(target==1){
return 1;
}else if(target ==2){
return 2;
}
int a=1;
int b=2;
int c=0;
for(int t = 3;t<=target;t++){
c=a+b;
a=b;
b=c;
}
return c;
}
}
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路解析:
跳台阶问题是斐波那契数列,所以还是比较简单的,把前面几种情况列出来以后,然后使用for循环就可以写出来了。
代码:public class Solution {
public int JumpFloor(int target) {
if(target == 0)
return 0;
else if(target == 1){
return 1;
}else if(target == 2){
return 2;
}
else if(target == 3){
return 3;
}
int a=2;
int b=3;
int c=0;
for(int i=4;i<=target;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
}2.变态跳台阶
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路解析:
f(1)=1;
f(2)=2;
f(3)=4
f(4)=f(1)+f(2)+f(3)=2f(3)
f(5)=f(1)+f(2)+f(3)+f(4)=2f(4)
f(n)=2f(n-1)=2*2*f(n-2)=……=2^n
代码:public class Solution {
public int JumpFloorII(int target) {
if(target<=0){
return 0;
}else if(target==1){
return 1;
}else if(target==2){
return 2;
}else if(target==3){
return 4;
}
int a=4;
for(int i=4;i<=target;i++){
a=a*2;
}
return a;
}
}3.矩形覆盖
题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路解析:
第一种是竖着放置,剩下的就是f(n-1)种方法了,第二种是横着放置,就是f(n-2)种方法了。递归和循环的方法,也是分治法。图片来自https://blog.csdn.net/fengsser/article/details/46691801
代码:public class Solution {
public int RectCover(int target) {
if(target<=0){
return 0;
}else if(target==1){
return 1;
}else if(target ==2){
return 2;
}
int a=1;
int b=2;
int c=0;
for(int t = 3;t<=target;t++){
c=a+b;
a=b;
b=c;
}
return c;
}
}
相关文章推荐
- 剑指offer——斐波那契数列,跳台阶、变态跳台阶、矩形覆盖
- 剑指offer——跳台阶&&变态跳台阶&&矩形覆盖
- 剑指offer 面试题9 斐波那契数列/青蛙跳台阶/矩形覆盖/变态跳台阶
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
- 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
- 剑指offer-chapter2-面试题9-矩形覆盖(java)
- 【剑指 offer】三,矩形覆盖(java实现)
- 【剑指offer——JAVA实现】变态跳台阶
- 【剑指offer——JAVA实现】矩形覆盖
- 【剑指offer】二,变态跳台阶(java实现)
- 跳台阶,变态跳台阶,矩形覆盖 代码实现
- 剑指offer 数字在排序数组中出现的次数 从尾到头打印链表 跳台阶 变态跳台阶
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer 矩形覆盖
- 剑指offer之变态跳台阶
- 剑指offer: 矩形覆盖(循环与递归)
- 牛客网-剑指offer-09-变态跳台阶
- 剑指OFFER之矩形覆盖(九度OJ1390)
- 牛客网 剑指offer-矩形覆盖
- 剑指Offer:变态跳台阶