import java.util.ArrayList; class Solution { private static final double eps = 0.000001; public boolean judgePoint24(int[] nums) { ArrayList list = new ArrayList<>(); for (int n : nums) list.add((double) n); return dfs(list); } private boolean dfs(ArrayList 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 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 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; } }