Leetcode 858.镜面反射(Mirror Reflection)

Leetcode 858.镜面反射

1 题目描述(Leetcode题目链接

  有一个特殊的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。

正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。

返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。

在这里插入图片描述

输入: p = 2, q = 1
输出: 2
解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 2

提示:

  • 1 <= p <= 1000
  • 0 <= q <= p

2 题解

  想象一下,把这样的正方体一直往上摞,问题就变成了光线反复横跳,看它最先跳到哪那个顶点。因此求 p , q p,q p,q的最小公倍数,最小公倍数等于 p q g c d ( p , q ) \cfrac{pq}{gcd(p,q)} gcd(p,q)pq,通过计算走了几步 p p p和走了几步 q q q来确定到达位置。

class Solution:
    def mirrorReflection(self, p: int, q: int) -> int:
        i = math.gcd(p, q)
        lr = (p//i)%2
        ud = (q//i)%2
        return 2 if not lr else 1 if ud else 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值