边工作边刷题: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))

posted @ 2016-06-21 04:19  absolute100  阅读(100)  评论(0编辑  收藏  举报