此题是技巧题,挺有意思的。题目主要是说镜子反射的问题,这题花费的比较长的时间。建议可以先手动画一画找找规律,我们可以很容易推导得到从侧面经过上下底面返回到第一个侧面的时候,距离最近点的初始距离是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