|
@@ -0,0 +1,37 @@
|
|
|
+import java.util.ArrayList;
|
|
|
+
|
|
|
+class Solution {
|
|
|
+ private static final double eps = 0.000001;
|
|
|
+
|
|
|
+ public boolean judgePoint24(int[] nums) {
|
|
|
+ ArrayList<Double> list = new ArrayList<>();
|
|
|
+ for (int n : nums) list.add((double) n);
|
|
|
+ return dfs(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean dfs(ArrayList<Double> list) {
|
|
|
+ if (list.size() == 1 && Math.abs(list.get(0) - 24.0) < eps) return true;
|
|
|
+ for (int i = 0; i < list.size() - 1; i++) {
|
|
|
+ for (int j = i + 1; j < list.size(); j++) {
|
|
|
+ ArrayList<Double> candidate = new ArrayList<>();
|
|
|
+ double n1 = list.get(i), n2 = list.get(j);
|
|
|
+ candidate.add(n1 + n2);
|
|
|
+ candidate.add(n1 - n2);
|
|
|
+ candidate.add(n2 - n1);
|
|
|
+ candidate.add(n1 * n2);
|
|
|
+ if (n2 != 0.0) candidate.add(n1 / n2);
|
|
|
+ if (n1 != 0.0) candidate.add(n2 / n1);
|
|
|
+ ArrayList<Double> next = new ArrayList<>();
|
|
|
+ for (int k = 0; k < list.size(); k++)
|
|
|
+ if (k != i && k != j)
|
|
|
+ next.add(list.get(k));
|
|
|
+ for (int k = 0; k < candidate.size(); k++) {
|
|
|
+ next.add(candidate.get(k));
|
|
|
+ if (dfs(next)) return true;
|
|
|
+ next.remove(next.size() - 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|