[递归回溯]679. 24 点游戏
679. 24 点游戏
核心思想是使用递归和回溯。每次递归调用时,我们从列表中取出两个数(通过队列的方式,即每次弹出第一个元素),然后对这两个数进行四则运算(加、减、乘、除),将运算结果放回列表中,然后递归处理新的列表(长度减少1)。当列表只剩下一个数时,我们检查它是否接近24(使用math.isclose
来避免浮点误差)。
class Solution:def judgePoint24(self, cards: List[int]) -> bool:if len(cards) == 1:return math.isclose(cards[0],24)for _ in range(len(cards)):a = cards.pop(0) # 取出第一张牌for _ in range(len(cards)):b = cards.pop(0) # 取出第二张牌for value in [a + b, a - b, a * b, b and a / b]:cards.append(value) # 存入计算结果if self.judgePoint24(cards): # 递归验证return Truecards.pop() # 回溯恢复状态cards.append(b) # 返还第二张牌cards.append(a) # 返还第一张牌return False