LeetCode858。鏡面反射(最小公倍数/最大公約数)

記事ディレクトリ

1.タイトル

各壁に鏡がある特別な正方形の部屋があります。
南西のコーナーを除いて、各コーナーにはレシーバーがあり、0、1、および2の番号が付けられています。

正方形の部屋の壁の長さはpです。南西の角からのレーザーショットのビームは、最初に東の壁に出会います。入射点と受信機0の間の距離はqです。

ライトが最初に遭遇するレシーバーの番号を返します(ライトが最終的にレシーバーに遭遇することを確認してください)。

示例:
输入: p = 2, q = 1
输出: 2
解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 2 。

提示:
1 <= p <= 1000
0 <= q <= p

出典:LeetCode(LeetCode)リンク:https ://leetcode-cn.com/problems/mirror-reflection
著作権はLeetCode が所有しています商用転載については、正式な許可書にご連絡ください。非商用転載については、出典を明記してください。

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/

QRコードを長押しまたはスキャンして、私の公式アカウント(Michael Amin)をフォローし、一緒に来て、学び、一緒に進歩してください!
マイケル・アミン

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/108645455