跳台阶&&矩形覆盖-剑指Offer

跳台阶 && 矩形覆盖

题目描述-跳台阶

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

题目描述-矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路

  1. 若有n个台阶,若先跳1阶,后面会有f(n-1)种跳法,若先跳2阶,后面会有f(n-2)种跳法。所以f(n)=f(n-1)+f(n-2)
  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;
    }
}
posted @ 2016-06-23 14:24  RosenDing  阅读(144)  评论(0编辑  收藏  举报