检查是否有可能从Python中的给定元素集中获得给定总和

假设我们有一个名为nums的数组和另一个值sum。我们必须检查是否有可能通过添加以num表示的元素来求和,我们可能会多次选择一个元素。

因此,如果输入类似于nums = [2,3,5] sum = 28,则输出将为True,因为我们可以使用5 + 5 + 5 + 5 + 5 + 3 + 3 + 2得到26

为了解决这个问题,我们将遵循以下步骤-

  • 最大:= 1000

  • table:=大小为0的最大广告填充数组

  • 定义一个功能util()。这将需要数字

  • 桌子[0]:= 1

  • 排序列表编号

  • 对于范围从0到nums的i-1,执行

    • 如果表[j]不为零,则

    • 表[j + val]:= 1

    • 进行下一次迭代

    • val:= nums [i]

    • 如果table [val]不为零,则

    • 对于介于0到MAX-val-1,范围内的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

    猜你喜欢