题目描述:
题解一:模拟整个过程(超时)
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))



