Skip to content

Commit 9430ae6

Browse files
committed
add: Target Sum
1 parent 1d6f7b0 commit 9430ae6

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ This is the solutions collection of my LeetCode submissions, most of them are pr
5656
|404|[Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/) | [JavaScript](./src/sum-of-left-leaves/res.js)|Easy|
5757
|416|[Partition Equal Subset Sum](https://leetcode.com/problems/partition-equal-subset-sum/) | [JavaScript](./src/partition-equal-subset-sum/res.js)|Medium|
5858
|434|[Number of Segments in a String](https://leetcode.com/problems/number-of-segments-in-a-string/) | [JavaScript](./src/number-of-segments-in-a-string/res.js)|Easy|
59+
|494|[Target Sum](https://leetcode.com/problems/target-sum/) | [JavaScript](./src/target-sum/res.js)|Medium|
5960
|516|[Longest Palindromic Subsequence](https://leetcode.com/problems/longest-palindromic-subsequence/) | [JavaScript](./src/longest-palindromic-subsequence/res.js)|Medium|
6061
|523|[Continuous Subarray Sum](https://leetcode.com/problems/continuous-subarray-sum/) | [JavaScript](./src/continuous-subarray-sum/res.js)|Medium|
6162
||[]() | [](./src//res.js)||

src/target-sum/res.js

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* res.js
3+
* @authors Joe Jiang ([email protected])
4+
* @date 2017-04-12 21:55:49
5+
*
6+
* You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.
7+
*
8+
* Find out how many ways to assign symbols to make sum of integers equal to target S.
9+
*
10+
* Solution idea: https://discuss.leetcode.com/topic/76243/java-15-ms-c-3-ms-o-ns-iterative-dp-solution-using-subset-sum-with-explanation
11+
*
12+
* @param {number[]} nums
13+
* @param {number} S
14+
* @return {number}
15+
*/
16+
let findTargetSumWays = function(nums, S) {
17+
let len = nums.length,
18+
res = 0;
19+
20+
for (let i=0; i<len; i++) {
21+
res += nums[i];
22+
}
23+
if ((res < S && res > -S) || (res+S) & 1) return 0;
24+
25+
return count(nums, len, (res+S)>>>1);
26+
};
27+
28+
/**
29+
* 计算子集存在满足等于 S 的情况数
30+
* @param {[type]} nums 数组
31+
* @param {[type]} len 数组长度
32+
* @param {[type]} S 计算总和
33+
* @return {[type]} [description]
34+
*/
35+
let count = function(nums, len, S) {
36+
let arr = new Array(S+1);
37+
arr[0] = 1;
38+
for (let i=1; i<=S; i++) {
39+
arr[i] = 0;
40+
}
41+
42+
// 遍历 nums 更新 arr 数组
43+
for (let i=0; i<len; i++) {
44+
for (let j=S; j>=nums[i]; j--) {
45+
arr[j] += arr[j-nums[i]];
46+
}
47+
}
48+
49+
return arr[S];
50+
}

0 commit comments

Comments
 (0)