Skip to content

Commit 25b68c8

Browse files
refactor 416
1 parent 81d4199 commit 25b68c8

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed

src/main/java/com/fishercoder/solutions/_416.java

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,46 +31,49 @@
3131
Explanation: The array cannot be partitioned into equal sum subsets.
3232
*/
3333
public class _416 {
34+
public static class Solution1 {
35+
/**
36+
* credit: https://discuss.leetcode.com/topic/67539/0-1-knapsack-detailed-explanation
37+
*/
38+
public boolean canPartition(int[] nums) {
39+
int sum = 0;
40+
for (int num : nums) {
41+
sum += num;
42+
}
3443

35-
/**credit: https://discuss.leetcode.com/topic/67539/0-1-knapsack-detailed-explanation*/
36-
public boolean canPartition(int[] nums) {
37-
int sum = 0;
38-
for (int num : nums) {
39-
sum += num;
40-
}
41-
42-
if ((sum & 1) == 1) {
43-
return false;
44-
}
44+
if ((sum & 1) == 1) {
45+
return false;
46+
}
4547

46-
sum /= 2;
48+
sum /= 2;
4749

48-
int n = nums.length;
49-
boolean[][] dp = new boolean[n + 1][sum + 1];
50-
for (int i = 0; i < dp.length; i++) {
51-
Arrays.fill(dp[i], false);
52-
}
50+
int n = nums.length;
51+
boolean[][] dp = new boolean[n + 1][sum + 1];
52+
for (int i = 0; i < dp.length; i++) {
53+
Arrays.fill(dp[i], false);
54+
}
5355

54-
dp[0][0] = true;
56+
dp[0][0] = true;
5557

56-
for (int i = 1; i < n + 1; i++) {
57-
dp[i][0] = true;
58-
}
59-
60-
for (int j = 1; j < sum + 1; j++) {
61-
dp[0][j] = false;
62-
}
58+
for (int i = 1; i < n + 1; i++) {
59+
dp[i][0] = true;
60+
}
6361

64-
for (int i = 1; i < n + 1; i++) {
6562
for (int j = 1; j < sum + 1; j++) {
66-
dp[i][j] = dp[i - 1][j];
67-
if (j >= nums[i - 1]) {
68-
dp[i][j] = (dp[i][j] || dp[i - 1][j - nums[i - 1]]);
63+
dp[0][j] = false;
64+
}
65+
66+
for (int i = 1; i < n + 1; i++) {
67+
for (int j = 1; j < sum + 1; j++) {
68+
dp[i][j] = dp[i - 1][j];
69+
if (j >= nums[i - 1]) {
70+
dp[i][j] = (dp[i][j] || dp[i - 1][j - nums[i - 1]]);
71+
}
6972
}
7073
}
71-
}
7274

73-
return dp[n][sum];
75+
return dp[n][sum];
76+
}
7477
}
7578

7679
}

src/test/java/com/fishercoder/_416Test.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,31 @@
66

77
import static org.junit.Assert.assertEquals;
88

9-
/**
10-
* Created by stevesun on 6/5/17.
11-
*/
129
public class _416Test {
13-
private static _416 test;
10+
private static _416.Solution1 solution1;
1411
private static int[] nums;
1512

1613
@BeforeClass
1714
public static void setup() {
18-
test = new _416();
15+
solution1 = new _416.Solution1();
1916
}
2017

2118
@Test
2219
public void test1() {
2320
nums = new int[]{1, 5, 11, 5};
24-
assertEquals(true, test.canPartition(nums));
21+
assertEquals(true, solution1.canPartition(nums));
2522
}
2623

2724
@Test
2825
public void test2() {
2926
nums = new int[]{1, 2, 3, 5};
30-
assertEquals(false, test.canPartition(nums));
27+
assertEquals(false, solution1.canPartition(nums));
3128
}
3229

3330
@Test
3431
public void test3() {
3532
nums = new int[]{1, 2, 3, 4, 5, 6, 7};
36-
assertEquals(true, test.canPartition(nums));
33+
assertEquals(true, solution1.canPartition(nums));
3734
}
3835

3936
}

0 commit comments

Comments
 (0)