美文网首页
Target Sum

Target Sum

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-04-16 21:02 被阅读171次

题目来源
一个数组,每个数字前面选择正号或者负号,问有多少种情况和为S。
实在不会,看了下答案,将其分为正子集和负子集,然后计算出
sum(N) = (target + sum) / 2
并且可以判断出target + sum为偶数。
代码如下:

class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int S) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        return sum < S || (S + sum) % 2 == 1 ? 0: subsetSum((S+sum)/2, nums);
    }
    
    int subsetSum(int s, vector<int> &nums)
    {
        int n = nums.size();
        vector<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];
    }
};

相关文章

网友评论

      本文标题:Target Sum

      本文链接:https://www.haomeiwen.com/subject/zqzaattx.html