假设我们有四个数字的列表,每个数字的范围是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