1. 题目
有一个特殊的正方形房间,每面墙上都有一面镜子。
除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。
正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。
返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。
示例:
输入: p = 2, q = 1
输出: 2
解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 2 。
提示:
1 <= p <= 1000
0 <= q <= p
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/mirror-reflection
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 向上走的距离是 p 的倍数时,能碰上接收器,求 p, q 的最小公倍数 m
- m 是 p 的偶数倍时,碰到南边,返回 0,否则碰到北边
- m 是 q 的奇数倍时,碰到 1,偶数倍时碰到 2
class Solution {
//C++
public:
int mirrorReflection(int p, int q) {
int g = __gcd(p, q);//最大公约数
int m = p*q/g;//最小公倍数,向上走的距离
if((m/p)%2 == 0)
return 0;
if((m/q)%2 == 1)
return 1;
return 2;
}
};
0 ms 5.9 MB
class Solution: # py3
def mirrorReflection(self, p: int, q: int) -> int:
def gcd(a, b):
while b:
r = a%b
a = b
b = r
return a
g = gcd(q, p); # 最大公约数
m = p*q/g; #最小公倍数,向上走的距离
if (m/p)%2 == 0:
return 0
if (m/q)%2 == 1:
return 1
return 2
36 ms 13.1 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!