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

假设我们有四个数字的列表,每个数字的范围是1到9,且顺序固定。现在,如果我们在数字之间放置运算符+,-,*和/(/表示整数除法),并用方括号将它们分组,则必须检查是否可以获取值24。

因此,如果输入类似于nums = [5、3、6、8、7],则输出将为True,因为(5 * 3)-6 +(8 + 7)= 24。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个功能recur()。这将需要

  • 答案:=一个新列表

  • 对于范围从0到arr-1的i,执行

    • 对于suf中的每个j,执行

    • 在答案末尾插入(k / j的商)

    • 在答案的末尾插入(k + j)

    • 在答案末尾插入(k-j)

    • 在答案的末尾插入(k * j)

    • 如果j不为0,则

    • pre:= recur(arr [从索引0到i])

    • suf:= recur(arr [从索引i +1到结束])

    • 对于pre中的每个k,

    • 如果答案的大小为0而arr的大小为1,则

      • 在答案末尾插入arr [0]

    • 返回答案

    • 从main方法中检查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
    猜你喜欢