leetcode 319. Bulb Switcher#Medium
题目大意:有编号从1到n共n盏灯,开始都是灭的。第1轮,改变每盏灯的状态;第2轮,改变编号是2的倍数的灯;..;第n轮,改变编号是n的倍数的灯。问最后有多少灯是亮的?
解法:灯在改变奇数次状态后是亮的,偶数次是灭的。每盏灯状态变换的次数其实是其编号的因数个数,而除了平方数外,所有正整数都有偶数个因数。
例如:
8 的因数 1,2,4,8 (编号为8的灯会在第1、2、4、8轮改变状态)
9的因数 1,3,9
10的因数1,2,5,10
所以,问题的答案就是在n以内有多少个平方数(对n开方向下取整),代码如下:
class Solution {
public:
int bulbSwitch(int n) {
return (int)sqrt(n);
}
};