ここでのオリジナルタイトルリンク:https://leetcode.com/problems/domino-and-tromino-tiling/
トピック:
2x1のドミノ形状、および「L」トロミノの形状:私たちは、2つのタイルの種類があります。これらの形状は、回転させてもよいです。
XX < -ドミノ XX < - "L"トロミノ X
Nを考えると、2×Nボードタイルにどのように多くの方法がありますか?10 ^ 9 + 7を法あなたの答えを返します。
(タイリングにおいて、すべての正方形がタイルで覆われなければならない。二つのタイリングが異なる場合やタイリングのうちの正確に1つのタイルによって占有両方正方形を有するように、ボード上の2つの4方向の隣接セルが存在する場合のみ)。
例: 入力:3 出力:5 説明: 5種類の方法を以下に示し、異なる文字は異なるタイルを示しています XYZ XXZ XYY XXY XYY XYZ YYZ XZZ XYY XXY
注意:
- Nは範囲内であろう
[1, 1000]
。
ソリューション:
いくつかの簡単な例を描き、ルーチンを見つけます。
DP [i]がタイルへの方法2 * iのボードを示してみましょう。
スペースを節約するために、配列のint型変数instreadを使用してください。
時間計算:O(N)。
スペース:O(1)。
ACのJava:
1 クラスソリューション{ 2 INT M =十億七。 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 W2 = 2 。 22 INT W3 = 5 。 23 のために(int型 I = 4; iが= Nを<; Iは++ ){ 24 INTは W4 =(W3 * 2%M + W1)%M。 25の W1 =をW2、 26の W2 =部W3、 27の W3 =部W4; 28 } 29 30 リターンW3。 31 } 32 }
同様に階段を登ります。