1. 给你一个整数数组 nums 和一个整数 target
    2. 向数组中的每个整数前添加 '+' '-' ,然后串联起所有整数,可以构造一个 表达式
    3. 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"
    4. 返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
    5. 示例 1
    6. 输入:nums = [1,1,1,1,1], target = 3
    7. 输出:5
    8. 解释:一共有 5 种方法让最终目标和为 3
    9. -1 + 1 + 1 + 1 + 1 = 3
    10. +1 - 1 + 1 + 1 + 1 = 3
    11. +1 + 1 - 1 + 1 + 1 = 3
    12. +1 + 1 + 1 - 1 + 1 = 3
    13. +1 + 1 + 1 + 1 - 1 = 3

    image.png

    1. class Solution {
    2. public int findTargetSumWays(int[] nums, int target) {
    3. int sum = 0;
    4. for(int num : nums){
    5. sum += num;
    6. }
    7. if ((target + sum) % 2 != 0) return 0;
    8. int tar = ( sum + target ) / 2;
    9. if(tar < 0) tar = -tar;
    10. int[] dp = new int[tar + 1];
    11. dp[0] = 1;
    12. for (int i = 0; i < nums.length; i++) {
    13. for (int j = tar; j >= nums[i]; j--) {
    14. dp[j] += dp[j - nums[i]];
    15. }
    16. }
    17. return dp[tar];
    18. }
    19. }