679 24 Game
679 24 Game
24 Game 
You are given an integer array cards of length 4. You have four cards, each containing a number in the range [1, 9]. You should arrange the numbers on these cards in a mathematical expression using the operators [’+’, ‘-‘, ‘*’, ‘/’] and the parentheses ‘(‘ and ‘)’ to get the value 24.
You are restricted with the following rules:
1
2
3
4
5
6
7
8
9
10
11
The division operator '/' represents real division, not integer division.
For example, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12.
Every operation done is between two numbers. In particular, we cannot use '-' as a unary operator.
For example, if cards = [1, 1, 1, 1], the expression "-1 - 1 - 1 - 1" is **not allowed**.
You cannot concatenate numbers together
For example, if cards = [1, 2, 1, 2], the expression "12 + 12" is not valid.
Return true if you can get such expression that evaluates to 24, and false otherwise.
Example 1:
1
2
3
4
5
**Input:** cards = [4,1,8,7]
**Output:** true
**Explanation:** (8-4) * (7-1) = 24
Example 2:
1
2
3
4
**Input:** cards = [1,2,1,2]
**Output:** false
Constraints:
1
2
cards.length == 4
1 <= cards[i] <= 9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Solution:
def judgePoint24(self, cards: List[int]) -> bool:
"""
we start with each number and then make a tree
eqch branch represents + , - , * , /
"""
def calc(arr):
#print(arr)
if len(arr) == 1 :
return [arr[0]]
result = []
for i, k in enumerate(arr):
for j , l in enumerate(arr):
if i == j:
continue
new_arr = []
m = k + l
new_arr.append(m)
for s in range(0,len(arr)):
if s != i and s != j:
new_arr.append(arr[s])
res = calc(new_arr)
result.append(res)
new_arr[0] = k - l
res = calc(new_arr)
result.append(res)
if k != 0:
new_arr[0] = float(l) / k
res = calc(new_arr)
result.append(res)
if l != 0:
new_arr[0] = float(k) / l
res = calc(new_arr)
result.append(res)
new_arr[0] = - k + l
res = calc(new_arr)
result.append(res)
new_arr[0] = k * l
res = calc(new_arr)
result.append(res)
return [x for xs in result for x in xs]
EPS = 1e-6
return any(abs(x - 24) < EPS for x in calc(cards))
This post is licensed under CC BY 4.0 by the author.