跳台阶&&矩形覆盖-剑指Offer
跳台阶 && 矩形覆盖
题目描述-跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题目描述-矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
- 若有n个台阶,若先跳1阶,后面会有f(n-1)种跳法,若先跳2阶,后面会有f(n-2)种跳法。所以f(n)=f(n-1)+f(n-2)
- 矩形覆盖的道理和跳台阶一样,若用小矩形竖着占第一个,剩下f(n-1)种占法,若横着排俩,则剩下f(n-2)种排法,所以还是f(n)=f(n-1)+f(n-2)
代码
public class Solution {
public int JumpFloor(int target) {
int[] result = {0, 1, 2};
if (target < 3)
{
return result[target];
}
int temp01 = 1;
int temp02 = 2;
int jnum = 0;
for (int i = 3; i <= target; i++)
{
jnum = temp01 + temp02;
temp01 = temp02;
temp02 = jnum;
}
return jnum;
}
}