力扣319(java)-灯泡开关(中等)
题目:
初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。
第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换第 i 个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。
找出并返回 n 轮后有多少个亮着的灯泡。
输入:n = 3
输出:1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
示例 2:
输入:n = 0
输出:0
示例 3:
输入:n = 1
输出:1
提示:
0 <= n <= 109
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bulb-switcher
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
n个灯泡要执行n轮灯泡状态的变换
1.灯泡什么时候才是 [亮] 的状态?----变换的次数为奇数次。
2.什么情况会改变第 i 个灯泡的开关?--- 当轮数k是 i 的约数时才会改变第 i 个灯泡的状态。
例如:
i = 4,只有第1,2,4会切换第4个灯泡的状态,所以最后第4个灯泡的状态是开,因为它做了奇数次的变换;
i = 8,只有1,2,4,8会切换第8个灯泡的状态,所以最后第8个灯泡的状态是关,因为它做了偶数次的变换。
因此就可以发现像4,9,16...这种完全平方数的约数就为奇数个(9 = 1x9=3x3,对于约数3来说,出现了两次所以忽略一次,故把9的约数看成3个,而不是4个),从而该题就可以转变为求:小于等于n的数中完全平方数的个数,即完全平方的个数为⌊√n⌋(⌊n⌋ 表示向下取整)最后灯泡亮着的个数为⌊√n⌋。
代码:
1 class Solution { 2 public int bulbSwitch(int n) { 3 return (int) Math.sqrt(n); 4 } 5 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)