679.java 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import java.util.ArrayList;
  2. class Solution {
  3. private static final double eps = 0.000001;
  4. public boolean judgePoint24(int[] nums) {
  5. ArrayList<Double> list = new ArrayList<>();
  6. for (int n : nums) list.add((double) n);
  7. return dfs(list);
  8. }
  9. private boolean dfs(ArrayList<Double> list) {
  10. if (list.size() == 1 && Math.abs(list.get(0) - 24.0) < eps) return true;
  11. for (int i = 0; i < list.size() - 1; i++) {
  12. for (int j = i + 1; j < list.size(); j++) {
  13. ArrayList<Double> candidate = new ArrayList<>();
  14. double n1 = list.get(i), n2 = list.get(j);
  15. candidate.add(n1 + n2);
  16. candidate.add(n1 - n2);
  17. candidate.add(n2 - n1);
  18. candidate.add(n1 * n2);
  19. if (n2 != 0.0) candidate.add(n1 / n2);
  20. if (n1 != 0.0) candidate.add(n2 / n1);
  21. ArrayList<Double> next = new ArrayList<>();
  22. for (int k = 0; k < list.size(); k++)
  23. if (k != i && k != j)
  24. next.add(list.get(k));
  25. for (int k = 0; k < candidate.size(); k++) {
  26. next.add(candidate.get(k));
  27. if (dfs(next)) return true;
  28. next.remove(next.size() - 1);
  29. }
  30. }
  31. }
  32. return false;
  33. }
  34. }