LeetCode 858-镜面反射

.container .card .information strong · · 637 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

题目:镜面反射

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

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

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

示例

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

题解

我们假设光不会反射,直接直行,如下图所示,由此我们可以得到以下结论

  • 如果 q % 2 == 0 , 反射点为 0
  • 如果 p % 2 == 0 , 反射点为 2
  • 如果 q % 2 == 1 , 反射点为 12
  • 如果 p % 2 == 1 , 反射点为 01

pq 不同时为偶数时,我们可以简化结论

  • 如果 q % 2 == 0 , 反射点为 0
  • 如果 p % 2 == 0 , 反射点为 2
  • 剩下情况,反射点为 1

func mirrorReflection(p int, q int) int {
    for q % 2 == 0 && p % 2 == 0 {
        p /= 2
        q /= 2
    }
    if p % 2 == 0 {
        return 2
    }
    if q % 2 == 0 {
        return 0
    }
    return 1
}


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:.container .card .information strong

查看原文:LeetCode 858-镜面反射

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

637 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传