美文网首页
319. 灯泡开关

319. 灯泡开关

作者: 放下梧菲 | 来源:发表于2020-06-10 10:33 被阅读0次

    初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。

    示例:

    输入: 3
    输出: 1
    解释:
    初始时, 灯泡状态 [关闭, 关闭, 关闭].
    第一轮后, 灯泡状态 [开启, 开启, 开启].
    第二轮后, 灯泡状态 [开启, 关闭, 开启].
    第三轮后, 灯泡状态 [开启, 关闭, 关闭].

    你应该返回 1,因为只有一个灯泡还亮着。

    这题一开始有点不明所以,之后看了下标签,脑筋急转弯,我就试试找找规律,输入了几个数,12啊,9啊,8啊这些数字,这时候还没看的太清楚,把12之前的所有答案都排列了一下发现,每次当4,9就会+1,那我干脆输入一个16,发现也加一,这个时候答案已经出来了,其实代码用一行即可。

    class Solution {
        public int bulbSwitch(int n) {
            return (int) Math.sqrt(n); 
        }
    }
    

    那究竟是为什么?其实原因就是这些平方数的所在灯是一定会亮的。细细想一想其实很简单!
    我们观察一下这道题的本质,其实就是一个灯它被切换了几次,其实就是看这个数的因数有几个,就会被切换几次。
    那很显然,一开始是关闭的,我们要求他切换的次数必须是奇数,才能开灯。那仔细思考一下,什么情况下才会是奇数呢???
    当一个数的因数个数是奇数的时候,他必须满足x * x 。 因为只有这个式子会让因数个数为奇数,否则的话必定是偶数,1和其本身是对应的,其他数也是一样的,只有两个数相等才可以,那其实就是平方数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/bulb-switcher
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:319. 灯泡开关

          本文链接:https://www.haomeiwen.com/subject/bpeutktx.html