Python 返回两个数组之和的数组
我最近在我的第一次编码面试中被问到这个问题,它仍然让我感到困惑 任务是:Python 返回两个数组之和的数组,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我最近在我的第一次编码面试中被问到这个问题,它仍然让我感到困惑 任务是: 返回一个等于两个数组之和的数组 数组可能为空 阵列的大小可能不同 数组中的项将始终为类型(int) 不能使用库、numpy或任何内置函数 具有预期输出的输入示例: add_two_array([1, 2, 3], [4, 5, 6]) => [5, 7, 9] add_two_array([9, 8, 7], [6, 5, 4]) ==> [1, 6, 4, 1] 我真的不理解“不能使用任何内置函数”的
- 返回一个等于两个数组之和的数组
- 数组可能为空
- 阵列的大小可能不同
- 数组中的项将始终为类型(int)
- 不能使用库、numpy或任何内置函数
add_two_array([1, 2, 3], [4, 5, 6]) => [5, 7, 9]
add_two_array([9, 8, 7], [6, 5, 4]) ==> [1, 6, 4, 1]
我真的不理解“不能使用任何内置函数”的要求。使用这种语言有什么意义。这仅使用列表类型追加和反转(切片): 另一种(稍微难看一点)方法是使用反向索引并携带余数。使用三元运算符将默认值设置为0:
def add_two_array(arr1, arr2):
result = []
rem = 0
for i in range(max(len(arr1), len(arr2))-1, -1, -1):
n = (arr1[i] if i < len(arr1) else 0) + (arr2[i] if i < len(arr2) else 0) + rem
result.append(n%10)
rem = n//10
if rem:
result.append(rem)
return result[::-1]
In []:
add_two_array([9, 8, 7], [6, 5, 4])
Out[]:
[1, 6, 4, 1]
def添加两个数组(arr1、arr2):
结果=[]
雷姆=0
对于范围内的i(最大值(len(arr1)、len(arr2))-1、-1、-1):
n=(arr1[i]如果i
您的问题陈述缺少您实际想要添加数字并结转额外十位的指示:
def add_two_array(A,B,carry=0):
if not (A or B or carry): return []
carry += A[-1] if A else 0
carry += B[-1] if B else 0
return add_two_array(A[:-1],B[:-1],carry//10)+[carry%10]
r = add_two_array([1, 2, 3], [4, 5, 6]);
print(r) # [5, 7, 9]
r = add_two_array([9, 8, 7], [6, 5, 4]);
print(r) # [1, 6, 4, 1]
这是一个很酷的问题,可以递归地解决,而无需使用任何内置函数和方法。这里,
\u add2
和\u add3
是递归帮助函数,add
是包装器
def _add2(a, carry):
if a == []: return [carry] if carry else []
s = a[-1] + carry
digit = s % 10
carry = s // 10
return _add2(a[:-1], carry) + [digit]
def _add3(a, b, carry):
if a == []: return _add2(b, carry)
if b == []: return _add2(a, carry)
s = a[-1] + b[-1] + carry
digit = s % 10
carry = s // 10
return _add3(a[:-1], b[:-1], carry) + [digit]
def add(a, b):
return _add3(a, b, 0)
add([9, 8, 7], [1, 6, 5, 4])
#[2, 6, 4, 1]
add([1, 6, 5, 4], [9, 8, 7])
#[2, 6, 4, 1]
我无法理解第二个示例的输出。为什么返回包含4个元素的数组?
987+654=1641
这些不是数组。这些是名单。他们让你在面试时添加数组了吗?sum()
a内置:)使用切片技术添加列表以避免indexer
-很好sum()
确实是内置的。我用得太多了,我没有意识到。看我的评论,我认为说“没有内置”是愚蠢的。
def _add2(a, carry):
if a == []: return [carry] if carry else []
s = a[-1] + carry
digit = s % 10
carry = s // 10
return _add2(a[:-1], carry) + [digit]
def _add3(a, b, carry):
if a == []: return _add2(b, carry)
if b == []: return _add2(a, carry)
s = a[-1] + b[-1] + carry
digit = s % 10
carry = s // 10
return _add3(a[:-1], b[:-1], carry) + [digit]
def add(a, b):
return _add3(a, b, 0)
add([9, 8, 7], [1, 6, 5, 4])
#[2, 6, 4, 1]
add([1, 6, 5, 4], [9, 8, 7])
#[2, 6, 4, 1]