Skip to content

Commit 5eee245

Browse files
committed
deploy: ab9837a
1 parent acfe2b3 commit 5eee245

File tree

4 files changed

+136
-16
lines changed

4 files changed

+136
-16
lines changed

en/lc/779/index.html

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24597,18 +24597,18 @@
2459724597
<ul class="md-nav__list">
2459824598

2459924599
<li class="md-nav__item">
24600-
<a href="#solution-1" class="md-nav__link">
24600+
<a href="#solution-1-recursion" class="md-nav__link">
2460124601
<span class="md-ellipsis">
24602-
Solution 1
24602+
Solution 1: Recursion
2460324603
</span>
2460424604
</a>
2460524605

2460624606
</li>
2460724607

2460824608
<li class="md-nav__item">
24609-
<a href="#solution-2" class="md-nav__link">
24609+
<a href="#solution-2-bit-manipulation-brain-teaser" class="md-nav__link">
2461024610
<span class="md-ellipsis">
24611-
Solution 2
24611+
Solution 2: Bit Manipulation + Brain Teaser
2461224612
</span>
2461324613
</a>
2461424614

@@ -86519,7 +86519,7 @@ <h2 id="description">Description</h2>
8651986519
<pre>
8652086520
<strong>Input:</strong> n = 2, k = 1
8652186521
<strong>Output:</strong> 0
86522-
<strong>Explanation:</strong>
86522+
<strong>Explanation:</strong>
8652386523
row 1: 0
8652486524
row 2: <u>0</u>1
8652586525
</pre>
@@ -86529,7 +86529,7 @@ <h2 id="description">Description</h2>
8652986529
<pre>
8653086530
<strong>Input:</strong> n = 2, k = 2
8653186531
<strong>Output:</strong> 1
86532-
<strong>Explanation:</strong>
86532+
<strong>Explanation:</strong>
8653386533
row 1: 0
8653486534
row 2: 0<u>1</u>
8653586535
</pre>
@@ -86547,8 +86547,20 @@ <h2 id="description">Description</h2>
8654786547
<h2 id="solutions">Solutions</h2>
8654886548
<!-- solution:start -->
8654986549

86550-
<h3 id="solution-1">Solution 1</h3>
86551-
<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>
86550+
<h3 id="solution-1-recursion">Solution 1: Recursion</h3>
86551+
<p>Let's first observe the pattern of the first few rows:</p>
86552+
<div class="highlight"><pre><span></span><code>n = 1: 0
86553+
n = 2: 0 1
86554+
n = 3: 0 1 1 0
86555+
n = 4: 0 1 1 0 1 0 0 1
86556+
n = 5: 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
86557+
...
86558+
</code></pre></div>
86559+
<p>We can see that the first half of each row is exactly the same as the previous row, and the second half is the inversion of the previous row. Note that "inversion" here means changing <span class="arithmatex">\(0\)</span> to <span class="arithmatex">\(1\)</span> and <span class="arithmatex">\(1\)</span> to <span class="arithmatex">\(0\)</span>.</p>
86560+
<p>If <span class="arithmatex">\(k\)</span> is in the first half, then the <span class="arithmatex">\(k\)</span>-th character is the same as the <span class="arithmatex">\(k\)</span>-th character of the previous row, so we can directly recurse with <span class="arithmatex">\(kthGrammar(n - 1, k)\)</span>.</p>
86561+
<p>If <span class="arithmatex">\(k\)</span> is in the second half, then the <span class="arithmatex">\(k\)</span>-th character is the inversion of the <span class="arithmatex">\((k - 2^{n - 2})\)</span>-th character of the previous row, i.e., <span class="arithmatex">\(kthGrammar(n - 1, k - 2^{n - 2}) \oplus 1\)</span>.</p>
86562+
<p>The time complexity is <span class="arithmatex">\(O(n)\)</span>, and the space complexity is <span class="arithmatex">\(O(n)\)</span>.</p>
86563+
<div class="tabbed-set tabbed-alternate" data-tabs="1:5"><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" /><input id="__tabbed_1_5" 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><label for="__tabbed_1_5">TypeScript</label></div>
8655286564
<div class="tabbed-content">
8655386565
<div class="tabbed-block">
8655486566
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
@@ -86628,14 +86640,50 @@ <h3 id="solution-1">Solution 1</h3>
8662886640
<span class="p">}</span>
8662986641
</code></pre></div></td></tr></table></div>
8663086642
</div>
86643+
<div class="tabbed-block">
86644+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
86645+
<span class="normal">2</span>
86646+
<span class="normal">3</span>
86647+
<span class="normal">4</span>
86648+
<span class="normal">5</span>
86649+
<span class="normal">6</span>
86650+
<span class="normal">7</span>
86651+
<span class="normal">8</span>
86652+
<span class="normal">9</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">kthGrammar</span><span class="p">(</span><span class="nx">n</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="nx">k</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
86653+
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
86654+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86655+
<span class="w"> </span><span class="p">}</span>
86656+
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">k</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mf">1</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">2</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
86657+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">kthGrammar</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="nx">k</span><span class="p">);</span>
86658+
<span class="w"> </span><span class="p">}</span>
86659+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">kthGrammar</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="nx">k</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="mf">1</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">2</span><span class="p">)))</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
86660+
<span class="p">}</span>
86661+
</code></pre></div></td></tr></table></div>
86662+
</div>
8663186663
</div>
8663286664
</div>
8663386665
<!-- solution:end -->
8663486666

8663586667
<!-- solution:start -->
8663686668

86637-
<h3 id="solution-2">Solution 2</h3>
86638-
<div class="tabbed-set tabbed-alternate" data-tabs="2:4"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python3</label><label for="__tabbed_2_2">Java</label><label for="__tabbed_2_3">C++</label><label for="__tabbed_2_4">Go</label></div>
86669+
<h3 id="solution-2-bit-manipulation-brain-teaser">Solution 2: Bit Manipulation + Brain Teaser</h3>
86670+
<p>In the problem, the index starts from <span class="arithmatex">\(1\)</span>. We will change <span class="arithmatex">\(k\)</span> to <span class="arithmatex">\(k-1\)</span>, converting the index to start from <span class="arithmatex">\(0\)</span>. In the following discussion, all indices start from <span class="arithmatex">\(0\)</span>.</p>
86671+
<p>Upon closer observation, the <span class="arithmatex">\(i\)</span>-th character in a row generates two characters at positions <span class="arithmatex">\(2i\)</span> and <span class="arithmatex">\(2i+1\)</span> in the next row.</p>
86672+
<div class="highlight"><pre><span></span><code>0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
86673+
</code></pre></div>
86674+
<p>If the <span class="arithmatex">\(i\)</span>-th character is <span class="arithmatex">\(0\)</span>, then the characters generated at positions <span class="arithmatex">\(2i\)</span> and <span class="arithmatex">\(2i+1\)</span> are <span class="arithmatex">\(0\)</span> and <span class="arithmatex">\(1\)</span>, respectively. If the <span class="arithmatex">\(i\)</span>-th character is <span class="arithmatex">\(1\)</span>, the generated characters are <span class="arithmatex">\(1\)</span> and <span class="arithmatex">\(0\)</span>.</p>
86675+
<div class="highlight"><pre><span></span><code>0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
86676+
^ * *
86677+
</code></pre></div>
86678+
<div class="highlight"><pre><span></span><code>0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
86679+
^ * *
86680+
</code></pre></div>
86681+
<p>We can see that the character at position <span class="arithmatex">\(2i\)</span> (even index) is always the same as the character at position <span class="arithmatex">\(i\)</span>, while the character at position <span class="arithmatex">\(2i+1\)</span> (odd index) is the inversion of the character at position <span class="arithmatex">\(i\)</span>. In other words, characters at odd indices are always the result of one inversion. If the number of inversions is even, the character remains unchanged; if the number of inversions is odd, it is equivalent to one inversion.</p>
86682+
<p>Therefore, we only need to check whether <span class="arithmatex">\(k\)</span> is odd. If it is, we accumulate one inversion. Then, we divide <span class="arithmatex">\(k\)</span> by <span class="arithmatex">\(2\)</span> and continue to check, accumulating the number of inversions until <span class="arithmatex">\(k\)</span> becomes <span class="arithmatex">\(0\)</span>.</p>
86683+
<p>Finally, we determine whether the number of inversions is odd. If it is, the answer is <span class="arithmatex">\(1\)</span>; otherwise, it is <span class="arithmatex">\(0\)</span>.</p>
86684+
<p>The process of accumulating the number of inversions is essentially equivalent to counting the number of <span class="arithmatex">\(1\)</span>s in the binary representation of <span class="arithmatex">\(k\)</span>.</p>
86685+
<p>The time complexity is <span class="arithmatex">\(O(\log k)\)</span>, and the space complexity is <span class="arithmatex">\(O(1)\)</span>.</p>
86686+
<div class="tabbed-set tabbed-alternate" data-tabs="2:5"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python3</label><label for="__tabbed_2_2">Java</label><label for="__tabbed_2_3">C++</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">TypeScript</label></div>
8663986687
<div class="tabbed-content">
8664086688
<div class="tabbed-block">
8664186689
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
@@ -86679,6 +86727,32 @@ <h3 id="solution-2">Solution 2</h3>
8667986727
<span class="p">}</span>
8668086728
</code></pre></div></td></tr></table></div>
8668186729
</div>
86730+
<div class="tabbed-block">
86731+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
86732+
<span class="normal"> 2</span>
86733+
<span class="normal"> 3</span>
86734+
<span class="normal"> 4</span>
86735+
<span class="normal"> 5</span>
86736+
<span class="normal"> 6</span>
86737+
<span class="normal"> 7</span>
86738+
<span class="normal"> 8</span>
86739+
<span class="normal"> 9</span>
86740+
<span class="normal">10</span>
86741+
<span class="normal">11</span>
86742+
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">kthGrammar</span><span class="p">(</span><span class="nx">n</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="nx">k</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
86743+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">bitCount</span><span class="p">(</span><span class="nx">k</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
86744+
<span class="p">}</span>
86745+
86746+
<span class="kd">function</span><span class="w"> </span><span class="nx">bitCount</span><span class="p">(</span><span class="nx">i</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
86747+
<span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">((</span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="mf">1</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mh">0x55555555</span><span class="p">);</span>
86748+
<span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mh">0x33333333</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">((</span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="mf">2</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mh">0x33333333</span><span class="p">);</span>
86749+
<span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="mf">4</span><span class="p">))</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mh">0x0f0f0f0f</span><span class="p">;</span>
86750+
<span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="mf">8</span><span class="p">);</span>
86751+
<span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="mf">16</span><span class="p">);</span>
86752+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mh">0x3f</span><span class="p">;</span>
86753+
<span class="p">}</span>
86754+
</code></pre></div></td></tr></table></div>
86755+
</div>
8668286756
</div>
8668386757
</div>
8668486758
<!-- solution:end -->

en/search/search_index.json

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

0 commit comments

Comments
 (0)