首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 858. 镜面反射(最小公倍数/最大公约数)

LeetCode 858. 镜面反射(最小公倍数/最大公约数)

作者头像
Michael阿明
发布2021-02-19 15:06:10
发布2021-02-19 15:06:10
6120
举报

文章目录

1. 题目

有一个特殊的正方形房间,每面墙上都有一面镜子。 除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。

正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。

返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。

代码语言:javascript
复制
示例:
输入: 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
代码语言:javascript
复制
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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档