灯泡开关

🎯 问题描述(来源于LeetCode)

1
2
3
4
5
初始时有 n个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。

第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第i轮,你每 i个灯泡就切换第 i 个灯泡的开关。直到第n轮,你只需要切换最后一个灯泡的开关。

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

灵感思路

结果n
0 0 sqrt(0)
1 2 3 1 sqrt(1)
4 5 6 7 8 2 sqrt(4)
9 10 11 12 13 14 15 3 sqrt(9)
16 17 18 19 20 21 ~~ 24 4 sqrt(16)
猜测结果=int(sqrt(n)) 向下取整

💻 代码实现

1
2
3
4
class Solution:
def bulbSwitch(self, n: int) -> int:
return int(math.sqrt(n))

📊 性能分析

提交结果

  • 运行时间:0ms击败100.00%
  • 内存消耗:17.38MB击败74.66%

复杂度验证

  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(1)O(1)