版权声明:原创部分都是自己总结的,如果转载请指明出处。觉得有帮助的老铁,请双击666! https://blog.csdn.net/qq_36387683/article/details/82532371
89. K数之和
给定 n 个不同的正整数,整数 k(k <= n)以及一个目标数字 target。
在这 n 个数里面找出 k 个数,使得这 k 个数的和等于目标数字,求问有多少种方案?
样例
给出 [1,2,3,4]
,k=2
, target=5
,[1,4]
和 [2,3]
是 2 个符合要求的方案,返回 2
。
class Solution:
"""
@param A: An integer array
@param k: A positive integer (k <= length(A))
@param target: An integer
@return: An integer
"""
'''
#TLE
def kSum(self, A, k, target):
# write your code here
#相当于找数组中K个数的组合,然后判断这些组合是否满足要求
self.res = []
self.helper(A, k, target, 0, len(A)-k+1, [])
return len(self.res)
def helper(self, A, k, target, start, end, nums):
if len(nums) + 1 == k:
for i in range(start, len(A)):
if sum(nums + [A[i]]) == target:
self.res.append(nums + [A[i]])
return
for i in range(start, end):
self.helper(A, k, target, i+1, end+1, nums+[A[i]])
'''
def kSum(self, A, k, target):
n = len(A)
dp = [[0] * (target + 1) for _ in range(k + 1)]
dp[0][0] = 1
for i in range(n):
for j in range(min(i + 1, k), 0, -1):
for t in range(A[i], target + 1):
dp[j][t] += dp[j - 1][t - A[i]]
return dp[k][target]