-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path790.domino-and-tromino-tiling.java
66 lines (66 loc) · 1.36 KB
/
790.domino-and-tromino-tiling.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
* @lc app=leetcode id=790 lang=java
*
* [790] Domino and Tromino Tiling
*
* https://leetcode.com/problems/domino-and-tromino-tiling/description/
*
* algorithms
* Medium (36.82%)
* Total Accepted: 9.7K
* Total Submissions: 26.4K
* Testcase Example: '3'
*
* We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape.
* These shapes may be rotated.
*
*
* XX <- domino
*
* XX <- "L" tromino
* X
*
*
* Given N, how many ways are there to tile a 2 x N board? Return your answer
* modulo 10^9 + 7.
*
* (In a tiling, every square must be covered by a tile. Two tilings are
* different if and only if there are two 4-directionally adjacent cells on the
* board such that exactly one of the tilings has both squares occupied by a
* tile.)
*
*
*
* Example:
* Input: 3
* Output: 5
* Explanation:
* The five different ways are listed below, different letters indicates
* different tiles:
* XYZ XXZ XYY XXY XYY
* XYZ YYZ XZZ XYY XXY
*
* Note:
*
*
* N will be in range [1, 1000].
*
*
*
*
*/
class Solution {
public int numTilings(int N) {
long a, b, x, y;
a = x = 0L;
b = y = 1L;
long M = 1000000007L;
for(int i=1; i<N; i++){
long nx, ny;
nx = b*2+x; ny = y+b+x;
a = x; b = y;
x = nx%M; y = ny%M;
}
return (int)y;
}
}