You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through *
, /
, +
, -
, (
, )
to get the value of 24.java
Example 1: express
Input: [4, 1, 8, 7]
Output: True
Explanation: (8-4) * (7-1) = 24this
Example 2: code
Input: [1, 2, 1, 2]
Output: Falserem
Note:get
/
represents real division, not integer division. For example, 4 / (1 - 2/3) = 12.-
as a unary operator. For example, with [1, 1, 1, 1]
as input, the expression -1 - 1 - 1 - 1
is not allowed.[1, 2, 1, 2]
, we cannot write this as 12 + 12.public class Game24 { public boolean judgePoint24(int[] nums) { ArrayList<Double> list = new ArrayList<>(); for (int v : nums) list.add((double) v); return solve(list); } private boolean solve(ArrayList<Double> list) { if (list.size() == 0) return false; if (list.size() == 1) return Math.abs(list.get(0) - 24) < 1e-6; for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { if (i != j) { ArrayList<Double> num = new ArrayList<>(); for (int k = 0; k < list.size(); k++) if (k!=i && k!=j){ num.add(list.get(k)); } for (int k = 0; k < 4; k++) { if (k < 2 && j > i) continue;; if (k == 0) num.add(list.get(i) + list.get(j)); if (k == 1) num.add(list.get(i) * list.get(j)); if (k == 2) num.add(list.get(i) - list.get(j)); if (k == 3) { if (list.get(j) != 0) { num.add(list.get(i) / list.get(j)); }else { continue; } } if (solve(num)) return true; num.remove(num.size() - 1); } } } } return false; } }