首页 > 其他 > 详细

Leetcode-灯泡开关

时间:2021-04-08 14:52:13      阅读:14      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 最先开始想模拟开关过程,结果运行时结果出错,但是发现错得很有规律,就手动模拟了一次,才发现数学规律简单至极,就是开平方。

 

分析

分析过程得画图,这里引用一个答主的解答。

模拟一下n从1到12的过程。第一轮打开了12个灯泡:

技术分享图片

 

 不用关心大于n的灯泡,用黑框表示。

技术分享图片

列出n从1-12的过程中所有的灯泡示意图。

技术分享图片

 

列表如下:

 技术分享图片

 

 证明:

约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。

从我们观察可以发现,如果一个灯泡有奇数个约数,那么最后这个灯泡一定会亮着。

奇数(odd)指不能被2整除的整数 ,数学表达形式为:2k+1, 奇数可以分为正奇数和负奇数。

所以其实我们是求,从1-n有多少个数的约数有奇数个。而**有奇数个约数的数一定是完全平方数。**这是因为,对于数n,如果m是它的约数,则n/m也是它的约数,若m≠n/m,则它的约数是以m、n/m的形式成对出现的。而m=n/m成立且n/m是正整数时,n是完全平方数,而它有奇数个约数。

再次转化问题,求1-n有多少个数是完全平方数。

 

代码实现

1 class Solution {
2     public int bulbSwitch(int n) {
3         return (int)Math.sqrt(n));
4     }
5 }

 

图表来源:

作者:ivan1
链接:https://leetcode-cn.com/problems/bulb-switcher/solution/bu-jiu-shi-qiu-ping-fang-gen-ma-by-ivan1/



 

Leetcode-灯泡开关

原文:https://www.cnblogs.com/pycdu/p/14631537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!