LeetCode 319. 灯泡开关

2019-08-28  本文已影响0人  phantom34

题目

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
上一篇 下一篇

猜你喜欢

热点阅读