1public int findTargetSumWays(int[] nums, int target) {
2 int total = 0;
3 for (int num : nums) {
4 total += num;
5 }
6 int diff = target + total;
7
8 if (diff < 0 || diff % 2 != 0) {
9 return 0;
10 }
11
12 int subsetSum = diff / 2;
13 int[] dp = new int[subsetSum + 1];
14 dp[0] = 1;
15
16 for (int num : nums) {
17 for (int j = subsetSum; j >= num; j--) {
18 dp[j] += dp[j - num];
19 }
20 }
21
22 return dp[subsetSum];
23}