检查是否可以通过在Python中放置运算符来形成24的程序
假设我们有一个固定顺序的由四个数字组成且每个数字都在1到9范围内的列表。现在,如果我们在数字之间放置运算符 +、-、* 和 /(/表示整数除法),并用括号分组,我们必须检查是否有可能得到值24。
因此,如果输入的是nums = [5, 3, 6, 8, 7],则输出将是True,因为(5 * 3)-6 +(8 + 7)= 24。
为了解决这个问题,我们将采取以下步骤:
- 定义recur()函数,它将获取arr
- answer := 一个新列表
- 对于从0到arr大小-1的i,进行以下操作
- 从arr[0到i]定义pre := recur()
- 从arr[i+1到end]定义suf := recur ()
- 对于pre中的每个k,执行以下操作
- 对于suf中的每个j,执行以下操作
- 将(k + j)插入answer的末尾
- 在answer的末尾插入(k-j)
- 在answer的末尾插入(k * j)
- 如果j不是0,则
- 在answer的末尾插入(k / j的商)
- 如果answer的大小为0且arr的大小为1,则
- 在answer的末尾插入arr[0]
- 返回answer
- 从主方法检查24是否在recur(nums)中,如果是返回True,否则返回false
让我们看以下实现以了解更多细节。
例子
class Solution:
def solve(self, nums):
def recur(arr):
answer = []
for i in range(len(arr) - 1):
pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :])
for k in pre:
for j in suf:
answer.append(k + j)
answer.append(k - j)
answer.append(k * j)
if j != 0:
answer.append(k // j)
if len(answer) == 0 and len(arr) == 1:
answer.append(arr[0])
return answer
return 24 in recur(nums)
ob = Solution()
nums = [5, 3, 6, 8, 7]
print(ob.solve(nums))
输入
[5, 3, 6, 8, 7]
输出
True