JAVA实现矩形覆盖问题(《剑指offer》)

题目描述:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
最近在刷《剑指offer》里的编程题,但是网上关于《剑指offer》的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码(当然也有部分是借鉴了网上别人的解答的,出处未注明敬请之处请指出,侵删),希望能对大家的学习有所帮助。
牛客网问题框架截图:
JAVA实现矩形覆盖问题(《剑指offer》)_第1张图片

解答:
<pre name="code" class="java">public class Solution {
    public int RectCover(int target) {
         //对实参进行预处理当然是必不可少的
        if(target<0) return 0; 
        
        int f0 = 0, f1 = 1; 
        int fn = f0 + f1; 
//这个问题最后也可以转化为斐波那契数列来思考:当大矩形的长度为n时,前两格的覆盖方式有两种,第一种是在第一格上竖着放一个小矩形,这样后面的空格的方法就和大矩形长度为n-1时一样;第二种是在前两格横着放置两格小矩形,这样后面的空格的放置方法就和大矩形长度为n-2时的一样
        for(int i=2; i<=target;i++){ 
            f0 = f1; 
            f1 = fn; 
            fn = f0 + f1; 
        } 
        return fn; 
    }
}


 
  

牛客网编译通过截图:
JAVA实现矩形覆盖问题(《剑指offer》)_第2张图片


你可能感兴趣的:(java,剑指offer)