319. 灯泡开关【我亦无他唯手熟尔】

简介: 319. 灯泡开关【我亦无他唯手熟尔】

319. 灯泡开关

难度中等

初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。
第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。

找出并返回 n 轮后有多少个亮着的灯泡。
示例 1:



输入:n = 3
输出:1 
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭]. 
你应该返回 1,因为只有一个灯泡还亮着。

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:1

提示:

  • 0 <= n <= 109

官方

方法一:数学

思路与算法
如果我们将所有的灯泡从左到右依次编号为1,2,⋯,n,那么可以发现:


在第 i 轮时,我们会将所有编号为 i 的倍数的灯泡进行切换。


因此,对于第k个灯泡,它被切换的次数恰好就是 k 的约数个数。如果 k 有偶数个约数,那么最终第 k 个灯泡的状态为暗;如果 k 有奇数个约数,那么最终第 k 个灯泡的状态为亮。


对于 k 而言,如果它有约数 x,那么一定有约数k/x 。因此只要当 x2≠ k 时,约数都是「成对」出现的。这就说明,只有当 k 是「完全平方数」时,它才会有奇数个约数,否则一定有偶数个约数。


因此我们只需要找出1,2,⋯,n 中的完全平方数的个数即可,答案即为 ⌊ n 1/2⌋,其中 ⌊⋅⌋ 表示向下取整。

细节

由于 n 1/2涉及到浮点数运算,为了保证不出现精度问题,我们可以计算(n+1/2) 1/2

,这样可以保证计算出来的结果向下取整在 32 位整数范围内一定正确。
作者:LeetCode-Solution

链接:https://leetcode-cn.com/problems/bulb-switcher/solution/deng-pao-kai-guan-by-leetcode-solution-rrgp/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

相关文章
|
9月前
500. 键盘行【我亦无他唯手熟尔】
500. 键盘行【我亦无他唯手熟尔】
35 0
|
6月前
不存在“2022年红绿灯新国标”,红灯停,绿灯行,黄灯亮了停一停~
不存在“2022年红绿灯新国标”,红灯停,绿灯行,黄灯亮了停一停~
40 0
|
6月前
|
存储 智能硬件
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
30 0
|
9月前
407. 接雨水 II【我亦无他唯手熟尔】
407. 接雨水 II【我亦无他唯手熟尔】
24 0
|
9月前
488. 祖玛游戏【我亦无他唯手熟尔】
488. 祖玛游戏【我亦无他唯手熟尔】
79 0
BOSHIDA 三河博电科技 开关电源模块 遥控开/关电路
模块电源的遥控开关操作,是通过 REM 端进行的。一般控制方式有两种: (1)REM 与-VIN(参考地)相连,遥控关断,要求 VREF<0.4V。REM 悬空或与+VIN 相连,模块工作,要求 VREM>1V。 (2)REM 与 VIN 相连,遥控关断,要求 VREM<0.4V。REM 与+VIN 相连,模块工作,要求 VREM>1V。REM 悬空,遥控关断,即所谓“悬空关断”(-R)。 如果控制要与输入端隔离,则可以使用光电耦合器作为传递控制信号。
BOSHIDA 三河博电科技  开关电源模块 遥控开/关电路
|
传感器 算法 Linux
电赛-风力摆控制系统
电赛-风力摆控制系统
202 2
电赛-风力摆控制系统
花样灯
花样灯 宏定义 初始化 延迟函数 闪烁 主函数
|
JavaScript 前端开发
【青训营】- 每天都在红绿灯前面梭行,不如自己来实现个红绿灯?
在我们的日常生活中,每天上班下班,伴随着我们最多的莫过于红绿灯了。那么,在下面的这篇文章中,我们将手动的来实现一个交通灯。瞅瞅每天都在看的红绿灯,它到底是怎么实现的呢?
【青训营】- 每天都在红绿灯前面梭行,不如自己来实现个红绿灯?
|
Python
一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)
一起玩转树莓派(4)——用开关控制蜂鸣器发声
553 0
一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)