检查是否可以通过在Python中放置运算符来形成24的程序

检查是否可以通过在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程