@@ -84631,7 +84631,7 @@ <h2 id="_2">解法</h2>
84631
84631
<!-- solution:start -->
84632
84632
84633
84633
<h3 id="_3">方法一</h3>
84634
- <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>
84634
+ <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">Swift </label></div>
84635
84635
<div class="tabbed-content">
84636
84636
<div class="tabbed-block">
84637
84637
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
@@ -84991,6 +84991,122 @@ <h3 id="_3">方法一</h3>
84991
84991
<span class="p">}</span>
84992
84992
</code></pre></div></td></tr></table></div>
84993
84993
</div>
84994
+ <div class="tabbed-block">
84995
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
84996
+ <span class="normal"> 2</span>
84997
+ <span class="normal"> 3</span>
84998
+ <span class="normal"> 4</span>
84999
+ <span class="normal"> 5</span>
85000
+ <span class="normal"> 6</span>
85001
+ <span class="normal"> 7</span>
85002
+ <span class="normal"> 8</span>
85003
+ <span class="normal"> 9</span>
85004
+ <span class="normal">10</span>
85005
+ <span class="normal">11</span>
85006
+ <span class="normal">12</span>
85007
+ <span class="normal">13</span>
85008
+ <span class="normal">14</span>
85009
+ <span class="normal">15</span>
85010
+ <span class="normal">16</span>
85011
+ <span class="normal">17</span>
85012
+ <span class="normal">18</span>
85013
+ <span class="normal">19</span>
85014
+ <span class="normal">20</span>
85015
+ <span class="normal">21</span>
85016
+ <span class="normal">22</span>
85017
+ <span class="normal">23</span>
85018
+ <span class="normal">24</span>
85019
+ <span class="normal">25</span>
85020
+ <span class="normal">26</span>
85021
+ <span class="normal">27</span>
85022
+ <span class="normal">28</span>
85023
+ <span class="normal">29</span>
85024
+ <span class="normal">30</span>
85025
+ <span class="normal">31</span>
85026
+ <span class="normal">32</span>
85027
+ <span class="normal">33</span>
85028
+ <span class="normal">34</span>
85029
+ <span class="normal">35</span>
85030
+ <span class="normal">36</span>
85031
+ <span class="normal">37</span>
85032
+ <span class="normal">38</span>
85033
+ <span class="normal">39</span>
85034
+ <span class="normal">40</span>
85035
+ <span class="normal">41</span>
85036
+ <span class="normal">42</span>
85037
+ <span class="normal">43</span>
85038
+ <span class="normal">44</span>
85039
+ <span class="normal">45</span>
85040
+ <span class="normal">46</span>
85041
+ <span class="normal">47</span>
85042
+ <span class="normal">48</span>
85043
+ <span class="normal">49</span>
85044
+ <span class="normal">50</span>
85045
+ <span class="normal">51</span>
85046
+ <span class="normal">52</span>
85047
+ <span class="normal">53</span>
85048
+ <span class="normal">54</span>
85049
+ <span class="normal">55</span>
85050
+ <span class="normal">56</span>
85051
+ <span class="normal">57</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">class</span> <span class="nc">Solution</span> <span class="p">{</span>
85052
+ <span class="kd">func</span> <span class="nf">openLock</span><span class="p">(</span><span class="kc">_</span> <span class="n">deadends</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span><span class="p">],</span> <span class="kc">_</span> <span class="n">target</span><span class="p">:</span> <span class="nb">String</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Int</span> <span class="p">{</span>
85053
+ <span class="kd">let</span> <span class="nv">deadSet</span> <span class="p">=</span> <span class="n">Set</span><span class="p">(</span><span class="n">deadends</span><span class="p">)</span>
85054
+ <span class="k">if</span> <span class="n">deadSet</span><span class="p">.</span><span class="bp">contains</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> <span class="o">||</span> <span class="n">deadSet</span><span class="p">.</span><span class="bp">contains</span><span class="p">(</span><span class="s">"0000"</span><span class="p">)</span> <span class="p">{</span>
85055
+ <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
85056
+ <span class="p">}</span>
85057
+ <span class="k">if</span> <span class="n">target</span> <span class="p">==</span> <span class="s">"0000"</span> <span class="p">{</span>
85058
+ <span class="k">return</span> <span class="mi">0</span>
85059
+ <span class="p">}</span>
85060
+
85061
+ <span class="kd">var</span> <span class="nv">visited</span> <span class="p">=</span> <span class="n">Set</span><span class="p"><</span><span class="nb">String</span><span class="p">>()</span>
85062
+ <span class="kd">var</span> <span class="nv">queue</span> <span class="p">=</span> <span class="p">[</span><span class="s">"0000"</span><span class="p">]</span>
85063
+ <span class="n">visited</span><span class="p">.</span><span class="bp">insert</span><span class="p">(</span><span class="s">"0000"</span><span class="p">)</span>
85064
+ <span class="kd">var</span> <span class="nv">step</span> <span class="p">=</span> <span class="mi">0</span>
85065
+
85066
+ <span class="k">while</span> <span class="o">!</span><span class="n">queue</span><span class="p">.</span><span class="bp">isEmpty</span> <span class="p">{</span>
85067
+ <span class="n">step</span> <span class="o">+=</span> <span class="mi">1</span>
85068
+ <span class="k">for</span> <span class="kc">_</span> <span class="k">in</span> <span class="mf">0.</span><span class="p">.<</span><span class="n">queue</span><span class="p">.</span><span class="bp">count</span> <span class="p">{</span>
85069
+ <span class="kd">let</span> <span class="nv">status</span> <span class="p">=</span> <span class="n">queue</span><span class="p">.</span><span class="n">removeFirst</span><span class="p">()</span>
85070
+ <span class="k">for</span> <span class="n">neighbor</span> <span class="k">in</span> <span class="n">getNeighbors</span><span class="p">(</span><span class="n">status</span><span class="p">)</span> <span class="p">{</span>
85071
+ <span class="k">if</span> <span class="n">visited</span><span class="p">.</span><span class="bp">contains</span><span class="p">(</span><span class="n">neighbor</span><span class="p">)</span> <span class="o">||</span> <span class="n">deadSet</span><span class="p">.</span><span class="bp">contains</span><span class="p">(</span><span class="n">neighbor</span><span class="p">)</span> <span class="p">{</span>
85072
+ <span class="k">continue</span>
85073
+ <span class="p">}</span>
85074
+ <span class="k">if</span> <span class="n">neighbor</span> <span class="p">==</span> <span class="n">target</span> <span class="p">{</span>
85075
+ <span class="k">return</span> <span class="n">step</span>
85076
+ <span class="p">}</span>
85077
+ <span class="n">queue</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">neighbor</span><span class="p">)</span>
85078
+ <span class="n">visited</span><span class="p">.</span><span class="bp">insert</span><span class="p">(</span><span class="n">neighbor</span><span class="p">)</span>
85079
+ <span class="p">}</span>
85080
+ <span class="p">}</span>
85081
+ <span class="p">}</span>
85082
+
85083
+ <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
85084
+ <span class="p">}</span>
85085
+
85086
+ <span class="kd">private</span> <span class="kd">func</span> <span class="nf">getNeighbors</span><span class="p">(</span><span class="kc">_</span> <span class="n">lock</span><span class="p">:</span> <span class="nb">String</span><span class="p">)</span> <span class="p">-></span> <span class="p">[</span><span class="nb">String</span><span class="p">]</span> <span class="p">{</span>
85087
+ <span class="kd">var</span> <span class="nv">neighbors</span> <span class="p">=</span> <span class="p">[</span><span class="nb">String</span><span class="p">]()</span>
85088
+ <span class="kd">var</span> <span class="nv">chars</span> <span class="p">=</span> <span class="nb">Array</span><span class="p">(</span><span class="n">lock</span><span class="p">)</span>
85089
+ <span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="mf">0.</span><span class="p">.<</span><span class="mi">4</span> <span class="p">{</span>
85090
+ <span class="kd">let</span> <span class="nv">original</span> <span class="p">=</span> <span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
85091
+ <span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">prevChar</span><span class="p">(</span><span class="n">original</span><span class="p">)</span>
85092
+ <span class="n">neighbors</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="nb">String</span><span class="p">(</span><span class="n">chars</span><span class="p">))</span>
85093
+ <span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">nextChar</span><span class="p">(</span><span class="n">original</span><span class="p">)</span>
85094
+ <span class="n">neighbors</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="nb">String</span><span class="p">(</span><span class="n">chars</span><span class="p">))</span>
85095
+ <span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">original</span>
85096
+ <span class="p">}</span>
85097
+ <span class="k">return</span> <span class="n">neighbors</span>
85098
+ <span class="p">}</span>
85099
+
85100
+ <span class="kd">private</span> <span class="kd">func</span> <span class="nf">prevChar</span><span class="p">(</span><span class="kc">_</span> <span class="n">c</span><span class="p">:</span> <span class="nb">Character</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Character</span> <span class="p">{</span>
85101
+ <span class="k">return</span> <span class="n">c</span> <span class="p">==</span> <span class="s">"0"</span> <span class="p">?</span> <span class="s">"9"</span> <span class="p">:</span> <span class="nb">Character</span><span class="p">(</span><span class="nb">UnicodeScalar</span><span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">asciiValue</span><span class="p">!</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
85102
+ <span class="p">}</span>
85103
+
85104
+ <span class="kd">private</span> <span class="kd">func</span> <span class="nf">nextChar</span><span class="p">(</span><span class="kc">_</span> <span class="n">c</span><span class="p">:</span> <span class="nb">Character</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Character</span> <span class="p">{</span>
85105
+ <span class="k">return</span> <span class="n">c</span> <span class="p">==</span> <span class="s">"9"</span> <span class="p">?</span> <span class="s">"0"</span> <span class="p">:</span> <span class="nb">Character</span><span class="p">(</span><span class="nb">UnicodeScalar</span><span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">asciiValue</span><span class="p">!</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
85106
+ <span class="p">}</span>
85107
+ <span class="p">}</span>
85108
+ </code></pre></div></td></tr></table></div>
85109
+ </div>
84994
85110
</div>
84995
85111
</div>
84996
85112
<!-- solution:end -->
@@ -85024,6 +85140,11 @@ <h3 id="_3">方法一</h3>
85024
85140
85025
85141
<nav>
85026
85142
85143
+ <a href="https://github.com/klever34" class="md-author" title="@klever34">
85144
+
85145
+ <img src="https://avatars.githubusercontent.com/u/12745225?v=4&size=72" alt="klever34">
85146
+ </a>
85147
+
85027
85148
<a href="https://github.com/taoyq1988" class="md-author" title="@taoyq1988">
85028
85149
85029
85150
<img src="https://avatars.githubusercontent.com/u/18185657?v=4&size=72" alt="taoyq1988">
0 commit comments