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

来源:互联网 发布:淘宝售后服务内容 编辑:程序博客网 时间:2024/05/22 13:21

题目描述:

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


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



牛客网编译通过截图:
0 0