Java 矩形覆盖
1. 題目描述
我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
2. 解題思路
- 當要覆蓋2*1的大矩陣時:只有一種方式即f(1) = 1
- 當要覆蓋2*2的大矩陣時:可以有兩種跳法:f(2) = 2
- 當有23階臺階時,這里先看第一步怎么走,分兩種情況:
當先覆蓋一個21時,那剩下的22覆蓋就有兩種情況,即f(2) = 2; 當先覆蓋一個22時,比如下圖中中間的覆蓋情況,那剩下的2*1就的覆蓋方法數為f(1) = 1;那么也即是n=3時,兩種情況加起來就是:f(3)=f(1)+f(2)
- 同理可以總結出:f(n)=f(n-1)+f(n-2),也即是斐波那契數列。
3. 代碼
public class RectangularCover {public static void main(String[] args){RectangularCover mm=new RectangularCover();int tt=mm.RectCover(4);System.out.println(tt); }public int RectCover(int target) {if ( target < 1 ) return 0;int g = 1;int f = 2;while (target>1 ) {f = f + g;g = f - g;target--;}return g;}}運行:
5以上僅作學習筆記。
總結
- 上一篇: Java 斐波那契数列
- 下一篇: Java 数值的二进制中1的个数和整数次