-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path24 Game.java
More file actions
67 lines (57 loc) · 1.86 KB
/
24 Game.java
File metadata and controls
67 lines (57 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class Solution {
public boolean judgePoint24(int[] cards) {
List<Double> list = new ArrayList<>();
for (int val : cards) {
list.add((double) val);
}
return dfs(list);
}
public boolean dfs(List<Double> list) {
if (list.size() == 1) {
// Use epsilon instead of Math.round
return Math.abs(list.get(0) - 24.0) < 1e-6;
}
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (i == j) continue;
double a = list.get(i);
double b = list.get(j);
int first = Math.max(i, j);
int second = Math.min(i, j);
list.remove(first);
list.remove(second);
// + addition
double sum = a + b;
list.add(sum);
if (dfs(list)) return true;
list.remove(list.size() - 1);
// - subtraction
sum = a - b;
list.add(sum);
if (dfs(list)) return true;
list.remove(list.size() - 1);
// * multiplication
sum = a * b;
list.add(sum);
if (dfs(list)) return true;
list.remove(list.size() - 1);
// / division
if (b != 0) {
sum = a / b;
list.add(sum);
if (dfs(list)) return true;
list.remove(list.size() - 1);
}
// restore list
if (i < j) {
list.add(i, a);
list.add(j, b);
} else {
list.add(j, b);
list.add(i, a);
}
}
}
return false;
}
}