Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回两个数组之和的数组_Python_Python 3.x_Algorithm - Fatal编程技术网

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]