检查是否可以使用给定的 Python 元素集合获得给定的总和
假设我们有一个名为 nums 的数组和另一个值 sum。我们必须检查是否可以通过添加 nums 中存在的元素来获得 sum,我们可以多次选择单个元素。
因此,如果输入类似于 nums = [2, 3, 5] sum = 28,则输出将为 True,因为我们可以使用 5 + 5 + 5 + 5 + 3 + 3 + 2 得到 28。
为了解决这个问题,我们将遵循以下步骤:
- MAX := 1000
- table := 一个大小为 MAX 的数组,并用 0 填充
- 定义一个函数 util()。这将采用 nums
- table[0] := 1
- 对列表 nums 进行排序
- 对于 i 的范围为 0 到 nums 的大小 - 1,执行:
- val := nums[i]
- 如果 table[val] 不为零,则
- 进行下一次迭代
- 对于 j 的范围为 0 到 MAX - val - 1,执行:
- 如果 table[j] 不为零,则
- table[j + val] := 1
- 如果 table[j] 不为零,则
- 从主方法执行以下操作:
- util(nums)
- 如果 table[sum] 不为零,则
- 返回 True
- 返回 False
让我们看看下面的实现以更好地理解:
示例
MAX = 1000 table = [0] * MAX def util(nums): table[0] = 1 nums.sort() for i in range(len(nums)): val = nums[i] if table[val]: continue for j in range(MAX - val): if table[j]: table[j + val] = 1 def solve(nums, sum): util(nums) if table[sum]: return True return False nums = [2, 3, 5] sum = 28 print (solve(nums, sum))
输入
[2, 3, 5], 28
输出
True
广告