本文主要是介绍[Lintcode]739. 24 Game/[Leetcode]679. 24 Game,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
# [Lintcode]739. 24 Game/[Leetcode]679. 24 Game
- 本题难度: Hard/Medium
## Description
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.
## 我的代码
```python
import sys
class Solution:
def judgePoint24(self, nums: List[int]) -> bool:
def cal(a,b):
if a == 0:
return b,-b,0
if b == 0:
return a,-a,0
return list({a+b,a-b,b-a,a*b,a/b,b/a})
stack = [[float(item) for item in nums]]
while (len(stack) > 0):
tmp_nums = stack.pop()
if len(tmp_nums) == 1:
if abs(tmp_nums[0] - 24.0) <= 0.0001:
return True
continue
l = len(tmp_nums)
for n1 in range(l - 1):
for n2 in range(n1 + 1,l):
tmp_cals = cal(tmp_nums[n1],tmp_nums[n2])
for tmp_cal in tmp_cals:
tmp_res = [tmp_cal] + tmp_nums[:n1] + tmp_nums[n1 + 1:n2] + tmp_nums[n2 + 1:]
stack.append(tmp_res)
return False
```
这篇关于[Lintcode]739. 24 Game/[Leetcode]679. 24 Game的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!