Python程式:計算和為k的子集數量


假設我們有一個名為nums的數字列表和另一個值k,我們需要找到列表中和為k的子集的數量。如果答案非常大,則將其對10^9 + 7取模。

因此,如果輸入類似於nums = [2, 3, 4, 5, 7] k = 7,則輸出將為3,因為我們可以選擇子集[2,5]、[3,4]和[7]。

為了解決這個問題,我們將遵循以下步驟:

  • dp := 一個大小為(k + 1)的列表,並用0填充
  • dp[0] := 1
  • m := 10^9 + 7
  • 對於i從0到nums的大小-1,執行以下操作:
    • 對於j從k到0,遞減1,執行以下操作:
      • 如果nums[i] <= j,則:
        • dp[j] := dp[j] + dp[j - nums[i]]
        • dp[j] := dp[j] mod m
  • 返回dp[k] mod m

讓我們檢視以下實現以更好地理解:

示例

線上演示

class Solution:
   def solve(self, nums, k):
      dp = [0] * (k + 1)
      dp[0] = 1
      m = int(1e9 + 7)
      for i in range(len(nums)):
         for j in range(k, -1, -1):
            if nums[i] <= j:
               dp[j] += dp[j - nums[i]]
               dp[j] %= m
      return dp[k] % m

ob = Solution()
nums = [2, 3, 4, 5, 7]
k = 7
print(ob.solve(nums, k))

輸入

[2, 3, 4, 5, 7], 7

輸出

3

更新於: 2020年12月3日

390 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告