题目描述

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

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

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

图示:

解题思路:

光线很大可能会在这个正方形中反射多次才能到达一个接收器,如果写代码考虑反射问题,则是比较复杂的。那么,反射问题该如何转换呢?

可以转换为在无限个堆叠的相同正方形中传播,说是无限个,其实光线传播的最远距离为p和q的最小公倍数,那么,最多经过的正方形个数就是pqlcm/ppq_{lcm} / ppqlcm​/p个,其中,pqlcmpq_{lcm}pqlcm​表示p和q的最小公倍数。

反射问题转换之后,下一个问题就是,堆叠后的正方形,接收器的位置和原正方形中如何对应呢?

可以想象一下,或者自己画示意图看下(画图比较麻烦此处就省略了),由于反射是对称的,那么,如果在第二个正方形的右上角接收到光线,那么对应于原正方形的0号接收器(即左下角);总结一下,奇数个正方形的的左上角和右上角依旧对应于原正方形的左上角和右上角,偶数个正方形的左上角和右上角则对应于原正方形的左下角和右下角。代码如下:

Python代码

class Solution:def mirrorReflection(self, p: int, q: int) -> int:# 求最小公倍数函数def lcm(x, y):if x%y == 0:return xelif y%x == 0:return yelse:lcm = x * ywhile (x != y):if x > y:x = x - yelse:y = y - xreturn int(lcm / x)pq_lcm = lcm(p, q)num_box = pq_lcm // p  #经过多少个boxnum_re = pq_lcm // q  #反射了几次 确定终点在左还是右if num_box % 2 == 1:if num_re % 2 == 1:return 1else:return 2else:if num_re % 2 == 1:return 0else:return None

Leetcode 858. 镜面反射 Python解法相关推荐

  1. 怎么学好python leetcode的题目太难了_为什么leetcode中的python解法过于pythonic,而忽略了算法题主要关注的复杂度问题?...

    @vczh 说的对,上leetcode就是学习算法的. 应该关心算法的复杂度,考虑代码的鲁棒性,各种edge case. 短的代码不意味着更容易理解,也不意味着效率更高. 我不反感这种一行的pytho ...

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

    文章目录 1. 题目 2. 解题 1. 题目 有一个特殊的正方形房间,每面墙上都有一面镜子. 除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2. 正方形房间的墙壁长度为 p,一束激光 ...

  3. LeetCode 111. Minimum Depth of Binary Tree--Java, Python解法--二叉树最小高度--迭代,递归

    题目地址:Minimum Depth of Binary Tree - LeetCode Given a binary tree, find its minimum depth. The minimu ...

  4. LeetCode 226. Invert Binary Tree--反转二叉树--C++,Python解法--递归,迭代做法

    题目地址:Invert Binary Tree - LeetCode Invert a binary tree. Example: Input: 4/ \2 7/ \ / \ 1 3 6 9 Outp ...

  5. LeetCode 204. Count Primes--从一开始的质数个数--Python解法--面试算法题

    题目地址:Count Primes - LeetCode Count the number of prime numbers less than a non-negative number, n. E ...

  6. LeetCode 458. Poor Pigs--智力题「小白鼠试毒」--C++,Python解法

    题目地址:Poor Pigs - LeetCode There are 1000 buckets, one and only one of them is poisonous, while the r ...

  7. LeetCode 230. Kth Smallest Element in a BST--C++,Python解法--面试真题--找二叉树中第K小的元素

    题目地址:Kth Smallest Element in a BST - LeetCode Given a binary search tree, write a function kthSmalle ...

  8. LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法

    题目地址:Maximal Square - LeetCode Given a 2D binary matrix filled with 0's and 1's, find the largest sq ...

  9. LeetCode 148. Sort List--面试算法题--C++,Python解法

    LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...

最新文章

  1. ZZNU 1993: cots' friends
  2. vue + element ui 的后台管理系统框架_从零开始搭建 VUE + Element UI后台管理系统框架...
  3. U3D 如何计算一个UI四个角的绝对坐标
  4. mysql遇到时区问题的坑(Java解决方案)
  5. 《计算机网络:自顶向下方法(原书第6版)》一第1章
  6. 动图解析:22张电气元件原理动图
  7. Financial knowledge
  8. Mac安装原版Windows7无法验证AppleSSD.sys文件数字签名解决办法
  9. 毕业设计之 --- 基于大数据分析的金融产品销售预测分析
  10. Linux命令大全(在线手册)
  11. 解决外网下载速度过慢问题
  12. 基于STM32的ESP8266获取心知天气数据
  13. 健身房小姐姐爆满了,我只用PR做了这一件事!
  14. 关于图的广度优先搜索—————洛谷1332
  15. springboot启动突然报错Could not resolve placeholder 'spring.datasource.driver-class-name'
  16. GWL_WNDPROC 、GWL_USERDATA、GWL_HINSTANCE未定义
  17. 软件开发工期估算系列(3)——見積もり値の「幼虫」「サナギ」「成虫」
  18. Cy3花青素荧光染料,(CAS:146368-13-0 )
  19. Hive sql 常用命令总结
  20. base64原理及加密C、Python代码

热门文章

  1. html5手机上签名,h5实现电子签名
  2. 链路预测 matlab,链路预测
  3. 小白学习MySQL - 聊聊数据备份的重要性
  4. 在Java代码中设置布局/控件
  5. 建设数字经济引领型城市 CDEC2022中国数字智能生态大会广州举行
  6. STM32测量PWM波频率及占空比
  7. 旷视科技经典文字检测EAST
  8. 9月18日 第5届 FLASH开发者交流会 暨FLASH CAMP 2010
  9. UOS系统适配-常用开发工具安装
  10. windows10录屏快捷键是什么