我试图在这里为合并排序编写合并函数。你知道吗
当我尝试递归地编写函数时,我无法找到全局修改变量nums1
的方法。你知道吗
我无法通过test4,因为修改后的nums1
从未全局返回。你知道吗
class Solution(object):
def merge(self, nums1, m, nums2, n):
if not nums1:
nums1[:] = nums2
return
if not nums2:
return
if nums1[0] < nums2[0]:
self.merge(nums1[1: ], m - 1, nums2, n)
return
if nums1[0] >= nums2[0]:
nums1[0], nums1[1:] = nums2[0], nums1[:]
self.merge(nums1, m + 1, nums2[1:], n - 1)
return
if __name__ == "__main__":
# nums1 = [1, 2, 3]
# nums2 = [-1, 4, 5]
# Solution().merge(nums1, 3, nums2, 3)
# assert nums1 == [-1, 1, 2, 3, 4, 5]
nums1 = []
nums2 = [2, 3, 4]
Solution().merge(nums1, 0, nums2, 3)
print("Outside", nums1)
assert nums1 == [2, 3, 4]
print('Test 1 passed!')
nums1 = [1, 2, 3]
nums2 = []
Solution().merge(nums1, 3, nums2, 0)
assert nums1 == [1, 2, 3]
print('Test 2 passed!')
nums1 = [1, 2, 3]
nums2 = [-1]
Solution().merge(nums1, 3, nums2, 1)
assert nums1 == [-1, 1, 2, 3]
print("Test 3 passed!")
nums1 = [1, 2, 3]
nums2 = [1.5]
Solution().merge(nums1, 3, nums2, 1)
print('outside nums1: ', nums1)
assert nums1 == [1, 1.5, 2, 3]
print("Test 4 passed!")
如果在表达式中使用列表的子范围(这里特别是作为函数调用的参数),而不是作为赋值的左侧,则会创建一个新的独立列表:
可能的解决方案:
nums1
merge
添加一个参数,它告诉nums1
的第一个项目应该被处理,并始终将完整的nums1
作为参数,如下所示:def merge(self, nums1, m, nums2, n, base=0): ... self.merge(nums1, m - 1, nums2, n, base + 1)
相关问题 更多 >
编程相关推荐