790. 多米诺和托米诺平铺

题目:

有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种形状都可以旋转。

给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 10^9 + 7 取模 的值。

平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。

790. 多米诺和托米诺平铺_第1张图片

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/domino-and-tromino-tiling

解题思路:

根据其前面摆法及递推,可以得到递推式:f(n) = 2*f(n-1)+f(n-3)

代码:

JAVA

class Solution {
		private static final long MOD = (long) 1e9 + 7;
	    public int numTilings(int n) {
	    if (n == 1) return 1;  //1种时对应的情况,不写此句n=1时数组会越界
	    long[] arr = new long[n+1];  //存放下标对应的摆法
	    arr[0] = arr[1] = 1;  //初始化
	    arr[2] = 2;
	    for(int i=3;i<=n;i++) {
	    	arr[i] = (2*arr[i-1] + arr[i-3]) % MOD;  //递推公式
	    }
	    return (int)arr[n];
	    }
	}


 

你可能感兴趣的:(Java,LeetCode,leetcode,算法,职场和发展)