这个题一开始我要用DFS,但是一直不知道 怎么得到次数,看了别人的答案发现可以在类里面定义一个全局的cnt:
class Solution {
public:
int cnt = 0;
int findTargetSumWays(vector<int>& nums, int S) {
findTargetSumWays(nums, 0, 0, S);
return cnt;
}
void findTargetSumWays(vector<int>& nums, int start, int al_res, int S)
{
if(start == nums.size())
{
if(al_res == S)
cnt++;
return;
}
findTargetSumWays(nums, start+1, al_res + nums[start], S);
findTargetSumWays(nums, start+1, al_res - nums[start], S);
}
};
但是这个题tag归在DP里,还是要用动态规划来做。看了别人的答案:
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int s) {
int sum = accumulate(nums.begin(), nums.end(), 0);
return sum < s || (s + sum) & 1 ? 0 : subsetSum(nums, (s + sum) >> 1);
}
int subsetSum(vector<int>& nums, int s) {
int dp[s + 1] = { 0 };
dp[0] = 1;
for (int n : nums)
for (int i = s; i >= n; i--)
dp[i] += dp[i - n];
return dp[s];
}
};
但是不懂subsetSum这个函数。。。