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.
Example 1:
Input: [4, 1, 8, 7]
Output: True
Explanation: (8-4) * (7-1) = 24
Example 2:
Input: [1, 2, 1, 2]
Output: False
Note:
- The division operator
/
represents real division, not integer division. For example, 4 / (1 - 2/3) = 12. - Every operation done is between two numbers. In particular, we cannot use
-
as a unary operator. For example, with[1, 1, 1, 1]
as input, the expression-1 - 1 - 1 - 1
is not allowed. - You cannot concatenate numbers together. For example, if the input is
[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;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。