题目:
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
示例:
输入: 3
输出: 1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
链接:https://leetcode-cn.com/problems/bulb-switcher
思路:
1、对于第P个灯泡,引起其状态变化的只有其正因子词操作时会发生变化。如P=5,则只有在第1次、第5次会发生状态翻转
2、对于第P个灯泡,有且在于P是完全平方数时,才会有奇数次因子数。如P=4,则P在1、2、4次会发生翻转
3、因此本题转换为求n个灯泡中的完全平方数的个数,即int(sqrt(n))
Python代码:
class Solution(object):
def bulbSwitch(self, n):
"""
:type n: int
:rtype: int
"""
return int(sqrt(n))
C++代码:
class Solution {
public:
int bulbSwitch(int n) {
return (int)sqrt(n);
}
};
网友评论