Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 677dae5

Browse files
feat: add solutions to leetcode problem: No.0494. Target Sum
1 parent 9c2b71e commit 677dae5

File tree

4 files changed

+142
-15
lines changed

4 files changed

+142
-15
lines changed

‎solution/0400-0499/0494.Target Sum/README.md‎

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
类似背包问题,只不过下标可能会出现负数,需要特殊处理。
46+
4547
<!-- tabs:start -->
4648

4749
### **Python3**
4850

49-
<!-- 这里可写当前语言的特殊实现逻辑 -->
50-
5151
```python
5252

5353
```
@@ -57,7 +57,57 @@
5757
<!-- 这里可写当前语言的特殊实现逻辑 -->
5858

5959
```java
60+
class Solution {
61+
public int findTargetSumWays(int[] nums, int target) {
62+
if (target < -1000 || target > 1000) {
63+
return 0;
64+
}
65+
66+
int n = nums.length;
67+
int[][] dp = new int[n][2001];
68+
69+
dp[0][nums[0] + 1000] = 1;
70+
dp[0][-nums[0] + 1000] += 1;
71+
72+
for (int i = 1; i < n; i++) {
73+
for (int j = -1000; j <= 1000; j++) {
74+
if (dp[i - 1][j + 1000] > 0) {
75+
dp[i][j + nums[i] + 1000] += dp[i - 1][j + 1000];
76+
dp[i][j - nums[i] + 1000] += dp[i - 1][j + 1000];
77+
}
78+
}
79+
}
80+
return dp[n - 1][target + 1000];
81+
}
82+
}
83+
```
84+
85+
### **Go**
86+
87+
<!-- 这里可写当前语言的特殊实现逻辑 -->
6088

89+
```go
90+
func findTargetSumWays(nums []int, target int) int {
91+
if target < -1000 || target > 1000 {
92+
return 0
93+
}
94+
n := len(nums)
95+
dp := make([][]int, n)
96+
for i := 0; i < n; i++ {
97+
dp[i] = make([]int, 2001)
98+
}
99+
dp[0][nums[0]+1000] += 1
100+
dp[0][-nums[0]+1000] += 1
101+
for i := 1; i < n; i++ {
102+
for j := -1000; j <= 1000; j++ {
103+
if dp[i-1][j+1000] > 0 {
104+
dp[i][j+nums[i]+1000] += dp[i-1][j+1000]
105+
dp[i][j-nums[i]+1000] += dp[i-1][j+1000]
106+
}
107+
}
108+
}
109+
return dp[n-1][target+1000]
110+
}
61111
```
62112

63113
### **...**

‎solution/0400-0499/0494.Target Sum/README_EN.md‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848

4949
## Solutions
5050

51+
It is similar to the backpack problem, except that the index may appear negative, which requires special handling.
52+
5153
<!-- tabs:start -->
5254

5355
### **Python3**
@@ -59,7 +61,55 @@
5961
### **Java**
6062

6163
```java
64+
class Solution {
65+
public int findTargetSumWays(int[] nums, int target) {
66+
if (target < -1000 || target > 1000) {
67+
return 0;
68+
}
69+
70+
int n = nums.length;
71+
int[][] dp = new int[n][2001];
72+
73+
dp[0][nums[0] + 1000] = 1;
74+
dp[0][-nums[0] + 1000] += 1;
75+
76+
for (int i = 1; i < n; i++) {
77+
for (int j = -1000; j <= 1000; j++) {
78+
if (dp[i - 1][j + 1000] > 0) {
79+
dp[i][j + nums[i] + 1000] += dp[i - 1][j + 1000];
80+
dp[i][j - nums[i] + 1000] += dp[i - 1][j + 1000];
81+
}
82+
}
83+
}
84+
return dp[n - 1][target + 1000];
85+
}
86+
}
87+
```
6288

89+
### **Go**
90+
91+
```go
92+
func findTargetSumWays(nums []int, target int) int {
93+
if target < -1000 || target > 1000 {
94+
return 0
95+
}
96+
n := len(nums)
97+
dp := make([][]int, n)
98+
for i := 0; i < n; i++ {
99+
dp[i] = make([]int, 2001)
100+
}
101+
dp[0][nums[0]+1000] += 1
102+
dp[0][-nums[0]+1000] += 1
103+
for i := 1; i < n; i++ {
104+
for j := -1000; j <= 1000; j++ {
105+
if dp[i-1][j+1000] > 0 {
106+
dp[i][j+nums[i]+1000] += dp[i-1][j+1000]
107+
dp[i][j-nums[i]+1000] += dp[i-1][j+1000]
108+
}
109+
}
110+
}
111+
return dp[n-1][target+1000]
112+
}
63113
```
64114

65115
### **...**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
func findTargetSumWays(nums []int, target int) int {
2+
if target < -1000 || target > 1000 {
3+
return 0
4+
}
5+
n := len(nums)
6+
dp := make([][]int, n)
7+
for i := 0; i < n; i++ {
8+
dp[i] = make([]int, 2001)
9+
}
10+
dp[0][nums[0]+1000] += 1
11+
dp[0][-nums[0]+1000] += 1
12+
for i := 1; i < n; i++ {
13+
for j := -1000; j <= 1000; j++ {
14+
if dp[i-1][j+1000] > 0 {
15+
dp[i][j+nums[i]+1000] += dp[i-1][j+1000]
16+
dp[i][j-nums[i]+1000] += dp[i-1][j+1000]
17+
}
18+
}
19+
}
20+
return dp[n-1][target+1000]
21+
}
Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
class Solution {
2-
public int findTargetSumWays(int[] nums, int S) {
3-
int[] ans = new int[1];
4-
wayDfs(nums, 0, S, ans);
5-
return ans[0];
6-
}
7-
8-
private void wayDfs(int[] nums, int start, int left, int[] ans) {
9-
if (start == nums.length) {
10-
if (left == 0) ans[0]++;
11-
return;
2+
public int findTargetSumWays(int[] nums, int target) {
3+
if (target < -1000 || target > 1000) {
4+
return 0;
125
}
136

14-
wayDfs(nums, start + 1, left + nums[start], ans);
15-
wayDfs(nums, start + 1, left - nums[start], ans);
7+
int n = nums.length;
8+
int[][] dp = new int[n][2001];
9+
10+
dp[0][nums[0] + 1000] = 1;
11+
dp[0][-nums[0] + 1000] += 1;
12+
13+
for (int i = 1; i < n; i++) {
14+
for (int j = -1000; j <= 1000; j++) {
15+
if (dp[i - 1][j + 1000] > 0) {
16+
dp[i][j + nums[i] + 1000] += dp[i - 1][j + 1000];
17+
dp[i][j - nums[i] + 1000] += dp[i - 1][j + 1000];
18+
}
19+
}
20+
}
21+
return dp[n - 1][target + 1000];
1622
}
17-
}
23+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /