0%

858. Mirror Reflection

做辅助线(延长线)找镜面反射的规律,每个pq对经过约分之后再分别对2取模,因为012的出现都是交替的

1
2
3
4
2 1 2 1 2
_ 0 _ 0 _
2 1 2 1 2
s 0 _ 0 _

举例p = 3, q = 2可以化简成p = 1, q = 0结果是一样的
最后规律如下

1
2
3
4
p q res
0 1 2
1 1 1
1 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
int mirrorReflection(int p, int q) {
int res[] = {0, 2, 0, 1};
int g = gcd(p, q); // 先约分化简(C++17自带)
p /= g; p %= 2;
q /= g; q %= 2;
return res[p * 2 + q];
}

int gcd(int a, int b) {
while (b != 0) {
a %= b;
swap(a, b);
}
return a;
}

// int gcd(int a, int b) {
// while (b != 0) {
// int t = a % b;
// a = b;
// b = t;
// }
// return a;
// }
};