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,执行以下操作:
- pre := recur(arr[从索引 0 到 i])
- suf := recur(arr[从索引 i + 1 到结尾])
- 对于 pre 中的每个 k,执行以下操作:
- 对于 suf 中的每个 j,执行以下操作:
- 在 answer 的末尾插入 (k + j)
- 在 answer 的末尾插入 (k - j)
- 在 answer 的末尾插入 (k * j)
- 如果 j 不为 0,则
- 在 answer 的末尾插入 (k / j 的商)
- 对于 suf 中的每个 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
广告