题目描述
初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。
第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。
找出并返回 n 轮后有多少个亮着的灯泡。
样例描述
思路
数论 + 推论
可以发现规律如下:
约束个数是奇数的数有什么性质
在 [1,n] 内有多少个数,其约数的个数为奇数。这些约数个数为奇数的灯泡就是最后亮着的灯泡。所以问题最终转换为:[1,n] 中完全平方数的个数为多少。
根据数论推论,[1,n]中完全平方数的个数为根号n
代码
class Solution {
public int bulbSwitch(int n) {
return (int)Math.sqrt(n);
}
}