回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试解决我在网上发现的一些编码难题。但是我被下面的问题阻止了。我试图用递归来解决它,但我觉得我缺少了递归中一个非常重要的概念。我的代码适用于以下所有示例,但最后一个示例将崩溃。在</p>
<p>有人能指出我在这个递归代码中犯的错误吗?或者引导我解决这个问题?在</p>
<p>我知道我的代码为什么会中断,但我不知道如何避开Python中的“pass-by-object-reference”,我认为这会给我带来更大的问题。在</p>
<p>编码问题是:</p>
<blockquote>
<p>On a mysterious island there are creatures known as Quxes which come in three colors: red, green, and blue. One power of the Qux is that if two of them are standing next to each other, they can transform into a single creature of the third color.</p>
<p>Given N Quxes standing in a line, determine the smallest number of them remaining after any possible sequence of such transformations.
For example, given the input <code>['R', 'G', 'B', 'G', 'B']</code>, it is possible to end up with a single Qux through the following steps:</p>
<pre><code> Arrangement | Change
----------------------------------------
['R', 'G', 'B', 'G', 'B'] | (R, G) -> B
['B', 'B', 'G', 'B'] | (B, G) -> R
['B', 'R', 'B'] | (R, B) -> G
['B', 'G'] | (B, G) -> R
['R'] |
________________________________________
</code></pre>
</blockquote>
<p>我的代码是:</p>
<pre><code>class fusionCreatures(object):
"""Regular Numbers Gen.
"""
def __init__(self , value=[]):
self.value = value
self.ans = len(self.value)
def fusion(self, fus_arr, i):
color = ['R','G','B']
color.remove(fus_arr[i])
color.remove(fus_arr[i+1])
fus_arr.pop(i)
fus_arr.pop(i)
fus_arr.insert(i, color[0])
return fus_arr
def fusionCreatures1(self, arr=None):
# this method is to find the smallest number of creature in a row after fusion
if arr == None:
arr = self.value
for i in range (0,len(arr)-1):
#print(arr)
if len(arr) == 2 and i >= 1 or len(arr)<2:
break
if arr[i] != arr[i+ 1]:
arr1 = self.fusion(arr, i)
testlen = self.fusionCreatures1(arr)
if len(arr) < self.ans:
self.ans = len(arr)
return self.ans
</code></pre>
<p>测试阵列(除最后一个外,所有阵列都工作):</p>
^{pr2}$