@@ -73,11 +73,11 @@ class Solution:
73
73
s = sum (nums)
74
74
if s < target or (s - target) % 2 != 0 :
75
75
return 0
76
- m, n = len (nums) + 1 , (s - target) // 2 + 1
77
- dp = [[0 ] * n for _ in range (m)]
76
+ m, n = len (nums), (s - target) // 2
77
+ dp = [[0 ] * (n + 1 ) for _ in range (m + 1 )]
78
78
dp[0 ][0 ] = 1
79
- for i in range (1 , m):
80
- for j in range (n):
79
+ for i in range (1 , m + 1 ):
80
+ for j in range (n + 1 ):
81
81
dp[i][j] = dp[i - 1 ][j]
82
82
if nums[i - 1 ] <= j:
83
83
dp[i][j] += dp[i - 1 ][j - nums[i - 1 ]]
@@ -92,12 +92,12 @@ class Solution:
92
92
s = sum (nums)
93
93
if s < target or (s - target) % 2 != 0 :
94
94
return 0
95
- m, n = len (nums) + 1 , ( s - target) // 2 + 1
96
- dp = [0 ] * n
95
+ n = ( s - target) // 2
96
+ dp = [0 ] * (n + 1 )
97
97
dp[0 ] = 1
98
- for i in range ( 1 , m) :
99
- for j in range (n - 1 , nums[i - 1 ] - 1 , - 1 ):
100
- dp[j] += dp[j - nums[i - 1 ] ]
98
+ for v in nums :
99
+ for j in range (n, v - 1 , - 1 ):
100
+ dp[j] += dp[j - v ]
101
101
return dp[- 1 ]
102
102
```
103
103
@@ -159,13 +159,12 @@ class Solution {
159
159
if (s < target || (s - target) % 2 != 0 ) {
160
160
return 0 ;
161
161
}
162
- int m = nums. length;
163
162
int n = (s - target) / 2 ;
164
163
int [] dp = new int [n + 1 ];
165
164
dp[0 ] = 1 ;
166
- for (int i = 1 ; i <= m; ++ i ) {
167
- for (int j = n; j >= nums[i - 1 ] ; -- j) {
168
- dp[j] += dp[j - nums[i - 1 ] ];
165
+ for (int v : nums ) {
166
+ for (int j = n; j >= v ; -- j) {
167
+ dp[j] += dp[j - v ];
169
168
}
170
169
}
171
170
return dp[n];
@@ -179,8 +178,7 @@ class Solution {
179
178
class Solution {
180
179
public:
181
180
int findTargetSumWays(vector<int >& nums, int target) {
182
- int s = 0;
183
- for (int& v : nums) s += v;
181
+ int s = accumulate(nums.begin(), nums.end(), 0);
184
182
if (s < target || (s - target) % 2 != 0) return 0;
185
183
int m = nums.size(), n = (s - target) / 2;
186
184
vector<vector<int >> dp(m + 1, vector<int >(n + 1));
@@ -202,19 +200,14 @@ public:
202
200
class Solution {
203
201
public:
204
202
int findTargetSumWays(vector<int>& nums, int target) {
205
- int s = 0;
206
- for (int& v : nums) s += v;
203
+ int s = accumulate(nums.begin(), nums.end(), 0);
207
204
if (s < target || (s - target) % 2 != 0) return 0;
208
- int m = nums.size(), n = (s - target) / 2;
205
+ int n = (s - target) / 2;
209
206
vector<int> dp(n + 1);
210
207
dp[0] = 1;
211
- for (int i = 1; i <= m; ++i)
212
- {
213
- for (int j = n; j >= nums[i - 1]; --j)
214
- {
215
- dp[j] += dp[j - nums[i - 1]];
216
- }
217
- }
208
+ for (int& v : nums)
209
+ for (int j = n; j >= v; --j)
210
+ dp[j] += dp[j - v];
218
211
return dp[n];
219
212
}
220
213
};
@@ -258,12 +251,12 @@ func findTargetSumWays(nums []int, target int) int {
258
251
if s < target || (s-target)%2 != 0 {
259
252
return 0
260
253
}
261
- m , n := len (nums), (s- target)/ 2
254
+ n := (s - target) / 2
262
255
dp := make ([]int , n+1 )
263
256
dp[0 ] = 1
264
- for i := 1 ; i <= m; i++ {
265
- for j := n; j >= nums[i- 1 ] ; j-- {
266
- dp[j] += dp[j-nums[i- 1 ] ]
257
+ for _ , v := range nums {
258
+ for j := n; j >= v ; j-- {
259
+ dp[j] += dp[j-v ]
267
260
}
268
261
}
269
262
return dp[n]
0 commit comments