Skip to content

Commit acfe2b3

Browse files
committed
deploy: f795901
1 parent a353ad8 commit acfe2b3

File tree

6 files changed

+261
-193
lines changed

6 files changed

+261
-193
lines changed

en/lc/781/index.html

Lines changed: 108 additions & 15 deletions
Large diffs are not rendered by default.

en/lc/790/index.html

Lines changed: 31 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -24839,18 +24839,9 @@
2483924839
<ul class="md-nav__list">
2484024840

2484124841
<li class="md-nav__item">
24842-
<a href="#solution-1" class="md-nav__link">
24842+
<a href="#solution-1-dynamic-programming" class="md-nav__link">
2484324843
<span class="md-ellipsis">
24844-
Solution 1
24845-
</span>
24846-
</a>
24847-
24848-
</li>
24849-
24850-
<li class="md-nav__item">
24851-
<a href="#solution-2" class="md-nav__link">
24852-
<span class="md-ellipsis">
24853-
Solution 2
24844+
Solution 1: Dynamic Programming
2485424845
</span>
2485524846
</a>
2485624847

@@ -86519,7 +86510,25 @@ <h2 id="description">Description</h2>
8651986510
<h2 id="solutions">Solutions</h2>
8652086511
<!-- solution:start -->
8652186512

86522-
<h3 id="solution-1">Solution 1</h3>
86513+
<h3 id="solution-1-dynamic-programming">Solution 1: Dynamic Programming</h3>
86514+
<p>First, we need to understand the problem. The problem is essentially asking us to find the number of ways to tile a <span class="arithmatex">\(2 \times n\)</span> board, where each square on the board can only be covered by one tile.</p>
86515+
<p>There are two types of tiles: <code>2 x 1</code> and <code>L</code> shapes, and both types of tiles can be rotated. We denote the rotated tiles as <code>1 x 2</code> and <code>L'</code> shapes.</p>
86516+
<p>We define <span class="arithmatex">\(f[i][j]\)</span> to represent the number of ways to tile the first <span class="arithmatex">\(2 \times i\)</span> board, where <span class="arithmatex">\(j\)</span> represents the state of the last column. The last column has 4 states:</p>
86517+
<ul>
86518+
<li>The last column is fully covered, denoted as <span class="arithmatex">\(0\)</span></li>
86519+
<li>The last column has only the top square covered, denoted as <span class="arithmatex">\(1\)</span></li>
86520+
<li>The last column has only the bottom square covered, denoted as <span class="arithmatex">\(2\)</span></li>
86521+
<li>The last column is not covered, denoted as <span class="arithmatex">\(3\)</span></li>
86522+
</ul>
86523+
<p>The answer is <span class="arithmatex">\(f[n][0]\)</span>. Initially, <span class="arithmatex">\(f[0][0] = 1\)</span> and the rest <span class="arithmatex">\(f[0][j] = 0\)</span>.</p>
86524+
<p>We consider tiling up to the <span class="arithmatex">\(i\)</span>-th column and look at the state transition equations:</p>
86525+
<p>When <span class="arithmatex">\(j = 0\)</span>, the last column is fully covered. It can be transitioned from the previous column's states <span class="arithmatex">\(0, 1, 2, 3\)</span> by placing the corresponding tiles, i.e., <span class="arithmatex">\(f[i-1][0]\)</span> with a <code>1 x 2</code> tile, <span class="arithmatex">\(f[i-1][1]\)</span> with an <code>L'</code> tile, <span class="arithmatex">\(f[i-1][2]\)</span> with an <code>L'</code> tile, or <span class="arithmatex">\(f[i-1][3]\)</span> with two <code>2 x 1</code> tiles. Therefore, <span class="arithmatex">\(f[i][0] = \sum_{j=0}^3 f[i-1][j]\)</span>.</p>
86526+
<p>When <span class="arithmatex">\(j = 1\)</span>, the last column has only the top square covered. It can be transitioned from the previous column's states <span class="arithmatex">\(2, 3\)</span> by placing a <code>2 x 1</code> tile or an <code>L</code> tile. Therefore, <span class="arithmatex">\(f[i][1] = f[i-1][2] + f[i-1][3]\)</span>.</p>
86527+
<p>When <span class="arithmatex">\(j = 2\)</span>, the last column has only the bottom square covered. It can be transitioned from the previous column's states <span class="arithmatex">\(1, 3\)</span> by placing a <code>2 x 1</code> tile or an <code>L'</code> tile. Therefore, <span class="arithmatex">\(f[i][2] = f[i-1][1] + f[i-1][3]\)</span>.</p>
86528+
<p>When <span class="arithmatex">\(j = 3\)</span>, the last column is not covered. It can be transitioned from the previous column's state <span class="arithmatex">\(0\)</span>. Therefore, <span class="arithmatex">\(f[i][3] = f[i-1][0]\)</span>.</p>
86529+
<p>We can see that the state transition equations only involve the previous column's states, so we can use a rolling array to optimize the space complexity.</p>
86530+
<p>Note that the values of the states can be very large, so we need to take modulo <span class="arithmatex">\(10^9 + 7\)</span>.</p>
86531+
<p>The time complexity is <span class="arithmatex">\(O(n)\)</span>, and the space complexity is <span class="arithmatex">\(O(1)\)</span>. Where <span class="arithmatex">\(n\)</span> is the number of columns of the board.</p>
8652386532
<div class="tabbed-set tabbed-alternate" data-tabs="1:4"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label></div>
8652486533
<div class="tabbed-content">
8652586534
<div class="tabbed-block">
@@ -86534,42 +86543,18 @@ <h3 id="solution-1">Solution 1</h3>
8653486543
<span class="normal"> 9</span>
8653586544
<span class="normal">10</span>
8653686545
<span class="normal">11</span>
86537-
<span class="normal">12</span>
86538-
<span class="normal">13</span>
86539-
<span class="normal">14</span>
86540-
<span class="normal">15</span>
86541-
<span class="normal">16</span>
86542-
<span class="normal">17</span>
86543-
<span class="normal">18</span>
86544-
<span class="normal">19</span>
86545-
<span class="normal">20</span>
86546-
<span class="normal">21</span>
86547-
<span class="normal">22</span>
86548-
<span class="normal">23</span>
86549-
<span class="normal">24</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="p">:</span>
86546+
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="p">:</span>
8655086547
<span class="k">def</span><span class="w"> </span><span class="nf">numTilings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
86551-
<span class="nd">@cache</span>
86552-
<span class="k">def</span><span class="w"> </span><span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
86553-
<span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">n</span> <span class="ow">or</span> <span class="n">j</span> <span class="o">&gt;</span> <span class="n">n</span><span class="p">:</span>
86554-
<span class="k">return</span> <span class="mi">0</span>
86555-
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">n</span> <span class="ow">and</span> <span class="n">j</span> <span class="o">==</span> <span class="n">n</span><span class="p">:</span>
86556-
<span class="k">return</span> <span class="mi">1</span>
86557-
<span class="n">ans</span> <span class="o">=</span> <span class="mi">0</span>
86558-
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">j</span><span class="p">:</span>
86559-
<span class="n">ans</span> <span class="o">=</span> <span class="p">(</span>
86560-
<span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
86561-
<span class="o">+</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
86562-
<span class="o">+</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
86563-
<span class="o">+</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
86564-
<span class="p">)</span>
86565-
<span class="k">elif</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">j</span><span class="p">:</span>
86566-
<span class="n">ans</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
86567-
<span class="k">else</span><span class="p">:</span>
86568-
<span class="n">ans</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span> <span class="o">+</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
86569-
<span class="k">return</span> <span class="n">ans</span> <span class="o">%</span> <span class="n">mod</span>
86570-
86548+
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
8657186549
<span class="n">mod</span> <span class="o">=</span> <span class="mi">10</span><span class="o">**</span><span class="mi">9</span> <span class="o">+</span> <span class="mi">7</span>
86572-
<span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
86550+
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
86551+
<span class="n">g</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="mi">4</span>
86552+
<span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86553+
<span class="n">g</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86554+
<span class="n">g</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86555+
<span class="n">g</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
86556+
<span class="n">f</span> <span class="o">=</span> <span class="n">g</span>
86557+
<span class="k">return</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
8657386558
</code></pre></div></td></tr></table></div>
8657486559
</div>
8657586560
<div class="tabbed-block">
@@ -86674,41 +86659,6 @@ <h3 id="solution-1">Solution 1</h3>
8667486659
</div>
8667586660
<!-- solution:end -->
8667686661

86677-
<!-- solution:start -->
86678-
86679-
<h3 id="solution-2">Solution 2</h3>
86680-
<div class="tabbed-set tabbed-alternate" data-tabs="2:1"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python3</label></div>
86681-
<div class="tabbed-content">
86682-
<div class="tabbed-block">
86683-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
86684-
<span class="normal"> 2</span>
86685-
<span class="normal"> 3</span>
86686-
<span class="normal"> 4</span>
86687-
<span class="normal"> 5</span>
86688-
<span class="normal"> 6</span>
86689-
<span class="normal"> 7</span>
86690-
<span class="normal"> 8</span>
86691-
<span class="normal"> 9</span>
86692-
<span class="normal">10</span>
86693-
<span class="normal">11</span>
86694-
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="p">:</span>
86695-
<span class="k">def</span><span class="w"> </span><span class="nf">numTilings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
86696-
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
86697-
<span class="n">mod</span> <span class="o">=</span> <span class="mi">10</span><span class="o">**</span><span class="mi">9</span> <span class="o">+</span> <span class="mi">7</span>
86698-
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
86699-
<span class="n">g</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="mi">4</span>
86700-
<span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86701-
<span class="n">g</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86702-
<span class="n">g</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">f</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> <span class="o">%</span> <span class="n">mod</span>
86703-
<span class="n">g</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
86704-
<span class="n">f</span> <span class="o">=</span> <span class="n">g</span>
86705-
<span class="k">return</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
86706-
</code></pre></div></td></tr></table></div>
86707-
</div>
86708-
</div>
86709-
</div>
86710-
<!-- solution:end -->
86711-
8671286662
<!-- problem:end -->
8671386663

8671486664

en/search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)