zoukankan      html  css  js  c++  java
  • 矩形覆盖(JAVA)

    矩形覆盖

      

      

      题目描述

      我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
      
      思路:最初看到这题,只能通过画图归纳来寻找规律.
        n=1,return 1;
        n=2,return 2;
        n=3,return 3;
        n=4,return 5;
        ......
        设置一个辅助数组dp,dp[i]为n=i时,共有的方法数。可以看出规律可能是dp[i] = dp[i-1]+dp[i-2]。
        
        这个时候换个角度反向思考一下,我们有一个想要覆盖好的矩阵,形状为2*n,当我们想由2*(n-1)得到它时,只能在其上加一个横着的,而我们想由2*(n-2)得到它时,我们只能加两个竖着的(加两个横着的不行,因为当加一个横着的时候就转化为了2*(n-1),而此时只有再加一个横着的,这就和2*(n-1)得到2*n这个变化方法重复了)
        所以可以证明上述猜测的结论是正确的,代码相应就很简单了。
         
        
     1     public int RectCover(int target) {
     2         if(target<=2) return target;
     3         int[] dp = new int[target+1];
     4         dp[1] = 1;
     5         dp[2] = 2;
     6         for(int i=3;i<=target;i++){
     7             dp[i] = dp[i-1]+dp[i-2];
     8         }
     9         return dp[target];
    10     }
  • 相关阅读:
    走进Android系统
    最后的一像素。
    rem介绍
    软件安装相关问题。
    iscroll
    程序员常用词语发音
    一个程序员眼中的好UI
    myeclipse性能优化
    注入配置数据
    java IO
  • 原文地址:https://www.cnblogs.com/ztqup666/p/9237779.html
Copyright © 2011-2022 走看看