Skip to content

Commit 0f96701

Browse files
Merge pull request algorithm001#719 from zsndev/master
week4-129
2 parents e205cdd + d4c3e55 commit 0f96701

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

Week_04/id_129/LeetCode_169_129.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import java.util.*;
2+
3+
public class LeetCode_169_129 {
4+
public int majorityElement(int[] num) {
5+
int major = num[0], count = 1;
6+
for (int i = 1; i < num.length; i++) {
7+
if (count == 0) {
8+
count++;
9+
major = num[i];
10+
} else if (major == num[i]) {
11+
count++;
12+
} else count--;
13+
14+
}
15+
return major;
16+
}
17+
}

Week_04/id_129/LeetCode_241_129.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public class LeetCode_241_129 {
7+
private Map<String, List<Integer>> memo = new HashMap<>();
8+
9+
public List<Integer> diffWaysToCompute(String input) {
10+
int len = input.length();
11+
// check history
12+
List<Integer> result = memo.get(input);
13+
if (result != null) {
14+
return result;
15+
}
16+
result = new ArrayList<>();
17+
// base case
18+
if (isDigit(input)) {
19+
result.add(Integer.parseInt(input));
20+
memo.put(input, result);
21+
return result;
22+
}
23+
for (int i = 0; i < len; i++) {
24+
char c = input.charAt(i);
25+
if (c == '+' || c == '-' || c == '*') {
26+
List<Integer> left = diffWaysToCompute(input.substring(0, i));
27+
List<Integer> right = diffWaysToCompute(input.substring(i + 1, len));
28+
for (Integer il : left) {
29+
for (Integer ir : right) {
30+
switch (c) {
31+
case '+':
32+
result.add(il + ir);
33+
break;
34+
case '-':
35+
result.add(il - ir);
36+
break;
37+
case '*':
38+
result.add(il * ir);
39+
break;
40+
}
41+
}
42+
}
43+
}
44+
}
45+
memo.put(input, result);
46+
return result;
47+
}
48+
49+
private boolean isDigit(String s) {
50+
for (Character c : s.toCharArray()) {
51+
if (!Character.isDigit(c)) {
52+
return false;
53+
}
54+
}
55+
return true;
56+
}
57+
}

0 commit comments

Comments
 (0)