python - 返回两个数组之和的数组
问题描述
我最近在我的第一次编码面试中被问到这个问题,它仍然让我很难过......
任务是:
- 返回一个等于两个数组之和的数组
- 数组可能为空
- 数组可能有不同的大小
- 数组中的项目将始终是 type(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]
解决方案
我真的不明白“不能使用任何内置函数”的要求。使用这种语言有什么意义。这仅使用列表类型来追加和反转(切片):
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]
推荐阅读
- react-native - 如何改变
动态值 React Native - node.js - Nodejs Typescript Jest Unit Test Coverage 显示了一些要覆盖的代码
- java - 在 JAVA 中创建的 H2 数据库在 H2 控制台中找不到?
- regex - 如何使用正则表达式从字符串中间删除一些东西?
- python - 列中的 dask 计数/频率项
- mongodb - Mongodb/嵌套事务:在另一个不工作的打开事务
- c - 在下面显示的代码中,“平均/=5.0”是什么意思?
- asp.net-core-mvc - 使用中间件将数据注入 ViewModel
- javascript - 如何使用 JavaScript 在 HTML 中生成可点击的数组/列表
- sql - 如何将 CTE 编码更改为 INLINE 视图?甲骨文 SQL