###1.我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
代码如下:
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;
else
return RectCover(target-1)+RectCover(target-2);
}
}
###2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
代码如下:
/*====================解题思路================*/
//1.一级台阶1种跳法,两级2种,三级4种,四级8种。
// 由此可得JumpFloorII(n)==JUmpFloorII(n-1)*2;
public class Solution {
public int JumpFloorII(int target) {
if(target <=0){
return 0;
}
else if(target == 1){
return 1;
}
else {
return 2*JumpFloorII(target-1);
}
}
}
###3.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
/*找规律,是个斐波那契数列(我思路错了,看了大佬的代码)
我想到了二叉树,牛逼了。
*/
public class Solution {
public int JumpFloor(int target) {
if(target == 1 || target == 2) {
return target;
}
// 第一阶和第二阶考虑过了,初始当前台阶为第三阶,向后迭代
// 思路:当前台阶的跳法总数=当前台阶后退一阶的台阶的跳法总数+当前台阶后退二阶的台阶的跳法总数
int jumpSum = 0;// 当前台阶的跳法总数
int jumpSumBackStep1 = 2;// 当前台阶后退一阶的台阶的跳法总数(初始值当前台阶是第3阶)
int jumpSumBackStep2 = 1;// 当前台阶后退二阶的台阶的跳法总数(初始值当前台阶是第3阶)
for(int i = 3; i <= target; i++) {
jumpSum= jumpSumBackStep1 + jumpSumBackStep2;
jumpSumBackStep2 = jumpSumBackStep1;// 后退一阶在下一次迭代变为后退两阶
jumpSumBackStep1 = jumpSum; // 当前台阶在下一次迭代变为后退一阶
}
return jumpSum;
}
}
###4.大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
代码如下:
/*思路
1.第一项第二项等于一,后面的项等于前两项之和。
2.首先判断边界。
3.循环,利用递归。
*/
public class Solution {
public int Fibonacci(int n) {
if(n<0){
return 0; //边界限定。
}
if(n==1||n==2){
return 1; //特殊情况。
}
int a = 1;
int b = 1;
int c = 0; //三个初值。
for(int i = 3;i<=n;i++){
c=a+b;
b=a;
a=c; //递归。
}
return c;
}
}