题目描述:
题解一:模拟整个过程(超时)
1.初始化代表n个灯泡,第一轮之后全部初始化为1
2.第二轮每两个将一个从1变为0
3.模拟第i轮,将第i个灯泡状态反转
class Solution(object): def bulbSwitch(self, n): if n==0: return 0 if n==1: return 1 lights = [1 for i in range(n)] for i in range(n): if (i+1)%2==0: lights[i]=0 for i in range(3,n+1): for j in range(n): if (j+1)%i==0: if lights[j]==0: lights[j]=1 else: lights[j]=0 return sum(lights)
题解二:参考【LeetCode】319. Bulb Switcher 解题报告(Python)_负雪明烛-CSDN博客
思路:
1.第i个灯泡,开关拨动次数为偶数,最终状态为灭,拨动次数为奇数,最终状态为亮。
2.第i个灯泡,被拨动的次数和i的因数数量相等。
n=3为例:
i=1 因数只有1
i=2 因数有1 2 在第一第二轮被拨动,最终灭
i=3 因数有1 3 在第一第三轮被拨动,最终灭
i的因数可以写作i=a*b情况,通常情况下成对出现,只有a=b的情况,即平方,才会出现因数数量为奇数。
因此题目可以转换为:求n内有多少个平方数。
class Solution(object): def bulbSwitch(self, n): return int(math.sqrt(n))