关于golang:LeetCode-858镜面反射

题目:镜面反射

题目:镜面反射
有一个非凡的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 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
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理