📅  最后修改于: 2023-12-03 14:56:02.007000             🧑  作者: Mango
有一个整数 n,k 和一个数组,数组中包含整数 1 到 k。请编写一个函数来确定是否有一种将数组中的整数相加得到 n 的方法。
例如,当 n = 5,k = 3,数组为 [1, 2, 3] 时,函数应该返回 False,因为无论如何也无法得到 5。
我们可以使用动态规划来解决这个问题。详见下面的 Python 代码:
def can_sum(n: int, arr: List[int]) -> bool:
# 创建一个布尔数组来表示 0 到 n 是否可以被得到
table = [False] * (n + 1)
# 初始化第一个值为 True
table[0] = True
for i in range(n + 1):
if table[i]:
# 对于数组中的每个数,标记可以组成 i + x
for x in arr:
if i + x <= n:
table[i + x] = True
# 如果 n 被标记,则可以组成
return table[n]
下面是一个示例:
assert can_sum(7, [2, 3]) == True
assert can_sum(7, [5, 3, 4, 7]) == True
assert can_sum(7, [2, 4]) == False
assert can_sum(8, [2, 3, 5]) == True
assert can_sum(300, [7, 14]) == False
以上程序实现了一个返回 true 或 false,即是否有一种将数组中的整数相加得到 n 的方法。