89. K数之和
中文English
给定 n 个不同的正整数,整数 k(k <= n)以及一个目标数字 target。
在这 n 个数里面找出 k 个数,使得这 k 个数的和等于目标数字,求问有多少种方案?
样例
样例1
输入:
List = [1,2,3,4]
k = 2
target = 5
输出: 2
说明: 1 + 4 = 2 + 3 = 5
样例2
输入:
List = [1,2,3,4,5]
k = 3
target = 6
输出: 1
说明: 只有这一种方案。 1 + 2 + 3 = 6
输入测试数据 (每行一个参数)如何理解测试数据?
不用纠结ij的大小关系 单独考虑每层循环即可
记得memset 虽然不懂为啥都是单独的函数内部的 还会出现多组数据
j也是倒序 与容量倒序同理
class Solution {
public:
/**
* @param A: An integer array
* @param k: A positive integer (k <= length(A))
* @param target: An integer
* @return: An integera
*/
int kSum(vector<int> &A, int k, int target) {
// write your code here
int n = A.size();
int dp[1000][1000];
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for (int i = 0; i < n; i ++) {
for (int j = k; j > 0; j --) {
for (int t = target; t >= A[i]; t --) {
dp[j][t] += dp[j-1][t-A[i]];
}
}
}
return dp[k][target];
}
};