做辅助线(延长线)找镜面反射的规律,每个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); 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; }
};
|