我被严重困在中间。有什么建议么?我尝试了以下代码:
def getSum(A, n, m, x, y):
res = 0
for row in range(n + 1):
for col in range(m + 1):
if col <= y:
res += A[row][col]
return res
最佳答案
问题是您试图遍历整个矩阵以“过滤掉”您不需要的值。相反,你应该尝试只迭代你需要的值,在这种情况下这是可能的而不是很难。对于这些行,您只需要从行索引 0
开始至 x
, 所以你会使用 for row in range(x + 1)
.对于列,您必须遍历所有列(直到 m - 1
)以获取行 0
至 x - 1
并且最多为 y
对于行索引 x
.您可以将其计算为 last_col = m - 1 if row < x else y
然后像for col in range(last_col + 1)
一样迭代.然后您只需对迭代的所有值求和,因为您不需要“过滤”它们中的任何一个:
def getSum(A, n, m, x, y):
res = 0
for row in range(x + 1):
last_col = m - 1 if row < x else y
for col in range(last_col + 1):
res += A[row][col]
return res
注意:n
和 m
参数在函数中并不是真正必需的,我保留了它们以保持您提出的相同函数原型(prototype),但是如果由您来决定您需要哪些参数,您可以将它们排除在外。即使您需要它们,您也可以从 A
获得它们使用 len
.
注意 2:我只考虑计算一组有效输入的结果的问题。请记住,在此类测试中,面试官多次想检查您如何处理错误的输入(负数、无效大小、None
等)和极端情况。
注意 3:如果您愿意,您可以在一行中完成所有操作,但老实说,这可能会更难阅读,我不确定面试官会不会喜欢这样。您也可以考虑一个中间选项。在任何情况下,上述函数体都可以浓缩为:
return sum(sum(A[row][col] for col in range(m if row < x else y + 1)) for x in range(x + 1))
关于python - 对于 NxM 数组,编写一个函数,如果用户输入是 (x,y),它应该返回从 (0,0) 到 (x,y) 的所有值的总和。其中 x<N & y<M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299947/