美文网首页
LeetCode 319. 灯泡开关

LeetCode 319. 灯泡开关

作者: phantom34 | 来源:发表于2019-08-28 15:18 被阅读0次

    题目

    319. 灯泡开关

    题目描述

    初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
    示例:
    输入: 3
    输出: 1
    解释:
    初始时, 灯泡状态 [关闭, 关闭, 关闭].
    第一轮后, 灯泡状态 [开启, 开启, 开启].
    第二轮后, 灯泡状态 [开启, 关闭, 开启].
    第三轮后, 灯泡状态 [开启, 关闭, 关闭].
    你应该返回 1,因为只有一个灯泡还亮着。

    题解

    简单数论,对于n个灯泡 进行n轮灯泡开关切换。第 i 轮,每 i 个灯泡切换一次开关。
    那么每个灯泡只有在i是x灯泡的因子时才会被切换,而且在会进行n轮切换也就是说x灯泡的所有因子都会被遍历,而对于一个数的因子个数 普遍都是偶数个 也就是n*m=x(n!=m)模式除了平方数会出现n*n=x 也就是说只有平方数是奇数个.那么这道题所求的不就是n以内(包括n)的平方数个数吗,那么对n开个根向下取整就好了

    代码

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

    结果

    image.png

    相关文章

      网友评论

          本文标题:LeetCode 319. 灯泡开关

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