📌  相关文章
📜  没有从 1 到 k 的总和得到 n 的方法 (1)

📅  最后修改于: 2023-12-03 14:56:02.007000             🧑  作者: Mango

没有从1到k的总和得到n的方法

有一个整数 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 的方法。