边工作边刷题:70天一遍leetcode: day 52
Bulb Switcher
要点:数学题一直是弱项,关键是推理思维总是不清晰。比如这题,模糊的知道因子对决定了最后亮灯的个数,但是具体的推理就没记住
先说答案,因为code极其简单:int(math.sqrt(n))
- 开始的时候理解错误,every second的意思是从2开始每隔2(1开始计数),所以灯泡1只打开1次不会关闭
- 有了1的基础,就好理解了:对于每一个灯泡,其被toggle的次数就是因子个数,所以只有完全平方数才是奇数次。当然这个也不是那么容易想,注意虽然完全平方数也有多个因子,但不影响奇偶性。
- 想到这里,还有一种错误理解,就是统计n之前的完全平方数要用loop,实际上就算sqrt(n)就可以了
class Solution(object):
def bulbSwitch(self, n):
"""
:type n: int
:rtype: int
"""
return int(math.sqrt(n))