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);
    }
}

相关文章
|
7月前
|
容器
如何在射击游戏中实现双摇杆控制?
如何在射击游戏中实现双摇杆控制?
82 0
|
2月前
|
API C# 开发工具
使用C#实现客厅电灯的开关
使用C#实现客厅电灯的开关
17 0
|
7月前
|
编解码 芯片 数据库管理
如何解决电子墨水屏标签的误唤醒和吵醒问题?
随着电商和物流快递行业的高速发展,人们网上购物越来越方便,线下实体店受到了越来越强烈的冲击。作为传统的商业模式,零售和商超自然不甘堕落,也在不断的学习互联网打法的精髓。经过多年不断的升级改造,其购物环境,价格体系,结算体验,服务意识方面都获得很大的提升,在某些区域或针对某些特定人群,其吸引力甚至远远超过了网上购物。
500. 键盘行【我亦无他唯手熟尔】
500. 键盘行【我亦无他唯手熟尔】
95 0
不存在“2022年红绿灯新国标”,红灯停,绿灯行,黄灯亮了停一停~
不存在“2022年红绿灯新国标”,红灯停,绿灯行,黄灯亮了停一停~
95 0
|
传感器
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
407. 接雨水 II【我亦无他唯手熟尔】
407. 接雨水 II【我亦无他唯手熟尔】
46 0
|
算法 C++
每日算法系列【LeetCode 319】灯泡开关
每日算法系列【LeetCode 319】灯泡开关
142 0
|
算法 C++ Python
【每日算法Day 61】LeetCode 672. 灯泡开关 Ⅱ
【每日算法Day 61】LeetCode 672. 灯泡开关 Ⅱ
110 0
|
容器
射击游戏中如何实现双摇杆控制
嗨!大家好,我是小蚂蚁。 在移动设备上玩射击游戏,双摇杆控制是一种比较好的方式,我们今天就来分享一下如何在射击游戏中实现双摇杆控制。 所谓的双摇杆控制,指的是一个摇杆控制角色的移动,一个摇杆控制角色的射击。 来到小游戏制作工具中,先导入一些素材。
210 0