1
+ class Solution {
2
+ public boolean judgePoint24 (int [] nums ) {
3
+ return dfs (Arrays .stream (nums ).boxed ().map (Double ::new ).collect (Collectors .toList ()));
4
+ }
5
+
6
+ private boolean dfs (List <Double > numList ) {
7
+ if (numList .size () == 0 ) {
8
+ return false ;
9
+ }
10
+ if (numList .size () == 1 ) {
11
+ return Math .abs (Math .abs (numList .get (0 ) - 24.0 )) < 0.000001d ;
12
+ }
13
+ for (int i = 0 ; i < numList .size (); i ++) {
14
+ for (int j = i + 1 ; j < numList .size (); j ++) {
15
+ boolean valid = dfs (getList (numList , i , j , 0 )) || dfs (getList (numList , i , j , 1 ))
16
+ || dfs (getList (numList , i , j , 2 )) || dfs (getList (numList , i , j , 3 ))
17
+ || dfs (getList (numList , i , j , 4 )) || dfs (getList (numList , i , j , 5 ));
18
+ if (valid ) {
19
+ return true ;
20
+ }
21
+ }
22
+ }
23
+ return false ;
24
+ }
25
+
26
+ private List <Double > getList (List <Double > numList , int i , int j , int operate ) {
27
+ List <Double > candidate = new ArrayList <>();
28
+ for (int k = 0 ; k < numList .size (); k ++) {
29
+ if (k == i || k == j ) {
30
+ continue ;
31
+ }
32
+ candidate .add (numList .get (k ));
33
+ }
34
+
35
+ switch (operate ) {
36
+ // a + b
37
+ case 0 :
38
+ candidate .add (numList .get (i ) + numList .get (j ));
39
+ break ;
40
+ // a - b
41
+ case 1 :
42
+ candidate .add (numList .get (i ) - numList .get (j ));
43
+ break ;
44
+ // b - a
45
+ case 2 :
46
+ candidate .add (numList .get (j ) - numList .get (i ));
47
+ break ;
48
+ // a * b
49
+ case 3 :
50
+ candidate .add (numList .get (i ) * numList .get (j ));
51
+ break ;
52
+ // a / b
53
+ case 4 :
54
+ if (numList .get (j ) == 0 ) {
55
+ return Collections .emptyList ();
56
+ }
57
+ candidate .add (numList .get (i ) / numList .get (j ));
58
+ break ;
59
+ // b / a
60
+ case 5 :
61
+ if (numList .get (i ) == 0 ) {
62
+ return Collections .emptyList ();
63
+ }
64
+ candidate .add (numList .get (j ) / numList .get (i ));
65
+ break ;
66
+ }
67
+ return candidate ;
68
+ }
69
+ }
0 commit comments