首页 > 解决方案 > 返回两个数组之和的数组

问题描述

我最近在我的第一次编码面试中被问到这个问题,它仍然让我很难过......

任务是:

具有预期输出的示例输入:

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]

标签: pythonpython-3.xalgorithm

解决方案


我真的不明白“不能使用任何内置函数”的要求。使用这种语言有什么意义。这仅使用列表类型来追加和反转(切片):

def add_two_array(arr1, arr2):
    def arr_to_int(arr):
        n = e = 0
        for d in arr[::-1]:
            n += d*10**e
            e += 1  # would be easier to use enumerate
        return n    # return sum(d*10**e for e, d in enumerate(arr[::-1])

    total = arr_to_int(arr1) + arr_to_int(arr2)
    result = []
    while total:
        result.append(total%10)
        total //= 10
    return result[::-1]

In []:
add_two_array([1, 2, 3], [4, 5, 6])

Out[]:
[5, 7, 9]

In []:
add_two_array([9, 8, 7], [6, 5, 4])

Out[]:
[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]

推荐阅读