【发布时间】:2026-01-17 03:40:01
【问题描述】:
所以我在做 coderbyte 的挑战,但我遇到了一个问题: ArrayAdditionI,问题说明如下:
''' 使用 Python 语言,让函数 ArrayAdditionI(arr) 获取存储在 arr 中的数字数组 如果数组中的任何数字组合可以加起来等于数组中的最大数字,则返回字符串 true, 否则返回字符串 false。 例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。 数组不会为空,不会包含所有相同的元素,并且可能包含负数。 '''
由于我做不到,我研究了一个解决方案,我发现了这个:
def countFor(arr, m, s0):
if len(arr) == 0:
return False
a0 = arr[0]
ar = arr[1:]
sw = s0 + a0
if sw == m:
return True
if countFor(ar, m, sw):
return True
if countFor(ar, m, s0):
return True
return False
def ArrayAdditionI(arr):
m = max(arr)
arr.remove(m)
return str(countFor(arr, m, 0)).lower()
现在,我试图了解代码在每个循环中的确切作用,我打印了此列表 [4, 6, 23, 10, 1, 3] 的每个循环的输出:
Input: [4, 6, 10, 1, 3] 23 0
a0: 4
ar: [6, 10, 1, 3]
sw: 4
Input: [6, 10, 1, 3] 23 4
a0: 6
ar: [10, 1, 3]
sw: 10
Input: [10, 1, 3] 23 10
a0: 10
ar: [1, 3]
sw: 20
Input: [1, 3] 23 20
a0: 1
ar: [3]
sw: 21
Input: [3] 23 21
a0: 3
ar: []
sw: 24
Input: [] 23 24
Input: [] 23 21
Input: [3] 23 20
a0: 3
ar: []
sw: 23
True
我跟随并理解发生了什么,直到最后三个循环,我不知道代码的哪一部分使它从“输入:[] 23 24”变为“输入:[] 23 21”到“输入:[3] 23 20"。
【问题讨论】: