龙空技术网

剑指Offer-JZ8:矩形覆盖(难度:中等)

JAVA技术专家 114

前言:

而今你们对“矩形java代码”大约比较关怀,你们都想要知道一些“矩形java代码”的相关资讯。那么小编在网摘上收集了一些对于“矩形java代码””的相关知识,希望姐妹们能喜欢,各位老铁们一起来了解一下吧!

题目描述

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

比如n=3时,2*3的矩形块有3种覆盖方法:

解题思路

矩形覆盖支持两种形式,横着或竖着。

当n=1时,只能竖着覆盖,f(1)=1;当n=2时,既可以横着覆盖,也可以竖着覆盖,f(2)=2;当n=3时,最后一款只能竖着,其他的覆盖方式为f(2),即:f(3)=f(1)+f(2)当n=N时,只需要考虑最后一块如何覆盖即可,即第一块只能竖着,推导出:f(n) = f(n-1)+f(n-2)

因此,该题目与青蛙跳台阶一样,可以跳一层、也可以跳两层,实现方案有两种:递归实现和循环实现。

实现代码

1.递归实现:

public class Solution {     public int rectCover(int target) {        if(target == 0) return 0 ;        if(target == 1) return 1 ;        if(target == 2) return 2 ;      	return rectCover(target-1) + rectCover(target-2);    }}

2.循环实现

public class Solution {    public int rectCover(int target) {        if(target == 0) return 0 ;        int a = 1, b = 1;        for (int i = 1; i < target; i++) {            a = a + b;            b = a - b;        }        return a;    }

如果您喜欢这篇文章,辛苦留言、点赞、关注~~~

更多剑指Offer技术分享:

剑指Offer-JZ1:二维数组中的查找

剑指Offer-JZ4:重建二叉树

剑指Offer-JZ7:斐波那契数列(难度:简单)

剑指Offer-JZ55:链表中有环的入口节点

标签: #矩形java代码