Skip to content

Commit 7ce1292

Browse files
authored
Improved task 473.
1 parent c95d5e2 commit 7ce1292

File tree

2 files changed

+23
-27
lines changed

2 files changed

+23
-27
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3307,7 +3307,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.11'
33073307
| 0476 |[Number Complement](src.save/main/java/g0401_0500/s0476_number_complement/Solution.java)| Easy | Bit_Manipulation | 0 | 100.00
33083308
| 0475 |[Heaters](src.save/main/java/g0401_0500/s0475_heaters/Solution.java)| Medium | Array, Sorting, Binary_Search, Two_Pointers | 8 | 99.30
33093309
| 0474 |[Ones and Zeroes](src.save/main/java/g0401_0500/s0474_ones_and_zeroes/Solution.java)| Medium | Array, String, Dynamic_Programming | 41 | 68.79
3310-
| 0473 |[Matchsticks to Square](src.save/main/java/g0401_0500/s0473_matchsticks_to_square/Solution.java)| Medium | Array, Dynamic_Programming, Bit_Manipulation, Backtracking, Bitmask | 241 | 18.95
3310+
| 0473 |[Matchsticks to Square](src.save/main/java/g0401_0500/s0473_matchsticks_to_square/Solution.java)| Medium | Array, Dynamic_Programming, Bit_Manipulation, Backtracking, Bitmask | 161 | 55.12
33113311
| 0472 |[Concatenated Words](src.save/main/java/g0401_0500/s0472_concatenated_words/Solution.java)| Hard | Array, String, Dynamic_Programming, Depth_First_Search, Trie | 84 | 79.03
33123312
| 0470 |[Implement Rand10() Using Rand7()](src.save/main/java/g0401_0500/s0470_implement_rand10_using_rand7/Solution.java)| Medium | Math, Randomized, Probability_and_Statistics, Rejection_Sampling | 10 | 51.04
33133313
| 0468 |[Validate IP Address](src.save/main/java/g0401_0500/s0468_validate_ip_address/Solution.java)| Medium | String | 1 | 98.15

src.save/main/java/g0401_0500/s0473_matchsticks_to_square/Solution.java

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,41 @@
11
package g0401_0500.s0473_matchsticks_to_square;
22

33
// #Medium #Array #Dynamic_Programming #Bit_Manipulation #Backtracking #Bitmask
4-
// #2022_03_18_Time_241_ms_(18.95%)_Space_42.1_MB_(40.60%)
4+
// #2022_07_14_Time_161_ms_(55.12%)_Space_40.4_MB_(88.85%)
5+
6+
import java.util.Arrays;
57

68
public class Solution {
79
public boolean makesquare(int[] matchsticks) {
810
if (matchsticks.length < 4) {
911
return false;
1012
}
11-
int totalSum = 0;
12-
for (int m : matchsticks) {
13-
totalSum += m;
13+
int per = 0;
14+
for (int ele : matchsticks) {
15+
per = ele + per;
1416
}
15-
if (totalSum % 4 != 0) {
17+
if (per % 4 != 0) {
1618
return false;
1719
}
18-
int target = totalSum / 4;
19-
boolean[] used = new boolean[matchsticks.length];
20-
return backtracking(matchsticks, used, target, 0, 0, 0);
20+
Arrays.sort(matchsticks);
21+
int side = per / 4;
22+
int[] sides = new int[] {side, side, side, side};
23+
return help(matchsticks, matchsticks.length - 1, sides);
2124
}
2225

23-
private boolean backtracking(
24-
int[] matchsticks, boolean[] used, int target, int count, int currSum, int start) {
25-
if (count == 3) {
26-
return true;
27-
}
28-
if (currSum > target) {
29-
return false;
26+
private boolean help(int[] nums, int i, int[] side) {
27+
if (i == -1) {
28+
return side[0] == 0 && side[1] == 0 && side[2] == 0 && side[3] == 0;
3029
}
31-
if (currSum == target) {
32-
return backtracking(matchsticks, used, target, count + 1, 0, 0);
33-
}
34-
for (int i = start; i < matchsticks.length; i++) {
35-
if (!used[i]) {
36-
used[i] = true;
37-
if (backtracking(
38-
matchsticks, used, target, count, currSum + matchsticks[i], i + 1)) {
39-
return true;
40-
}
41-
used[i] = false;
30+
for (int j = 0; j < 4; j++) {
31+
if (nums[i] > side[j]) {
32+
continue;
33+
}
34+
side[j] -= nums[i];
35+
if (help(nums, i - 1, side)) {
36+
return true;
4237
}
38+
side[j] += nums[i];
4339
}
4440
return false;
4541
}

0 commit comments

Comments
 (0)