LeetCode 790. Domino и тримина Черепица Поднимается по лестнице

Оригинальное название ссылка здесь: https://leetcode.com/problems/domino-and-tromino-tiling/

тема:

У нас есть два вида плитки: форма 2x1 домино, и «L» форма триминой. Эти формы могут быть повернуты.

XX <- Домино 

XX <- "L" тримино 
X

Учитывая N, сколько существует способов для плитки 2 х N доска? Вернуться ваш ответ по модулю 10 ^ 9 + 7.

(В черепице, каждый квадрат должен быть покрыт плиткой. Два тайлингов различны, если и только если есть два 4-направленно соседние клетки на доске таким образом, что именно один из разбиений имеют как квадраты, занятые плитка.)

Пример: 
Входной сигнал: 3 
Выход: 5 
Пояснение: 
Пять различных способов , которые перечислены ниже, различные буквы показывает различные плитки: 
XYZ XXZ XYY XXY XYY 
XYZ YYZ XZZ XYY XXY

Примечание:

  • N будет находиться в диапазоне  [1, 1000].

Решение:

Нарисуйте несколько простых примеров и найти рутину.

Пусть дп [я] обозначает пути к плитке 2 * я борт. 

 

 Используйте INT переменной instread массива, чтобы сохранить пространство.

Время Сложность: O (N).

Площадь: O (1).

AC Java:

1  класс Решение {
 2      INT М = 1000000007 ;
3      общественных  INT numTilings ( INT N) , {
 4 ,          если (N <= 0 ) {
 5              возврата 0 ;
6          }
 7          
8 ,          если (N == 1 ) {
 9              возврата 1 ;
10          }
 11          
12 ,          если (N == 2 ) {
 13              возврата 2 ;
14          }
 15          
16 ,          если (N == 3 ) {
17              возврата 5 ;
18          }
 19          
20          INT w1 = 1 ;
21          INT ш2 = 2 ;
22          INT w3 = 5 ;
23          для ( INT I = 4; г <= N; я ++ ) {
 24              Int w4 = (W3 * 2% M + w1)% M;
25              w1 = w2;
26              w2 = w3;
27              W3 = W4;
28          }
 29          
30          возврата W3;
31      }
 32 }

Точно так же подъем по лестнице .

рекомендация

отwww.cnblogs.com/Dylan-Java-NYC/p/11526332.html