Оригинальное название ссылка здесь: 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 }
Точно так же подъем по лестнице .