LeetCode 292. Nim 游戏(Easy)/ 319. 灯泡开关(M)/ 365. 水壶问题(M)

在这里插入图片描述

class Solution:
    # 0208 数学法(40 ms,14.9 MB)
    def canWinNim(self, n: int) -> bool:
        return n % 4 != 0

319. 灯泡开关

在这里插入图片描述

365. 水壶问题

在这里插入图片描述

class Solution:
    # 使用栈来模拟递归
    def canMeasureWater(self, x: int, y: int, z: int) -> bool:
        stack = [(0, 0)]
        self.seen = set()

        while stack:
            remain_x, remain_y = stack.pop()

            if remain_x == z or remain_y == z or remain_x + remain_y == z:
                return True

            if (remain_x, remain_y) in self.seen:
                continue

            self.seen.add((remain_x, remain_y))

            # 把 X 壶灌满
            stack.append((x, remain_y))
            # 把 Y 壶灌满
            stack.append((remain_x, y))
            # 把 X 壶倒空
            stack.append((0, remain_y))
            # 把 Y 壶倒空
            stack.append((remain_x, 0))
            # 把 X 壶的水灌进 Y 壶,直至灌满或倒空
            stack.append((remain_x - min(remain_x, y - remain_y), remain_y + min(remain_x, y - remain_y)))
            # 把 Y 壶的水灌进 X 壶,直至灌满或倒空
            stack.append((remain_x + min(remain_y, x - remain_x), remain_y - min(remain_y, x - remain_x)))

        return False

在这里插入图片描述

  • 解法2:数学(贝祖定理)
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值