leetcode 858

此题是技巧题,挺有意思的。题目主要是说镜子反射的问题,这题花费的比较长的时间。建议可以先手动画一画找找规律,我们可以很容易推导得到从侧面经过上下底面返回到第一个侧面的时候,距离最近点的初始距离是q- p %q,这个可以通过斜率不变以及相似三角形的性质推导得到。知道这一点之后,我们需要考虑的只有方向的问题,我们可以设置两个bool变量,来表示在上下,和在左右,我们可以很容易知道每次碰到上下面的时候,上下方向肯定会改变,对于左右的情况,我们需要看看p/q的值,分成奇数和偶数考虑,一种是方向不变,一种是方向改变。虽然这题最后自己做出来了,但是觉得挺有趣的,mark一下,附代码:

class Solution:
    def mirrorReflection(self, p, q):
        """
        :type p: int
        :type q: int
        :rtype: int
        """
        res = 0
        if q ==0:
            return 0
        right = False
        up = True
        while not ((p-res)%q == 0):
            count = int((p-res)/q)
            if count % 2 == 0:
                right = not right
            res = q - (p-res)%q
            up = not up
        if ((p-res)/q) % 2 == 1:
            right = not right
        if right and up:
            return 1
        elif not right and up:
            return 2
        else:
            return 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值