详细论证见: https://www.acwing.com/solution/LeetCode/content/346/
/**
1. 开始是关闭的, 只有被按奇数次最后才会开
2. 第i轮按i的倍数, 也就是说i会在它的每个约数轮次被按 -> 求为1~n中约数为奇数的个数
3. 每个数的约数都是成对出现的, 若x 是 n的约数. 那么 n/x 必定为n的约数, 但当 n/x == x 时, 约数必定有奇数个 -> 求1~n中有多少个平方数
4. 平方数依次为 1^2, 2^2, 3^3 .... n^2, 2^2即之前最多有2个, 3^2及之前最多有3个 -> answer = (int)sqrt(n);
*/
class Solution {
public int bulbSwitch(int n) {
return (int)Math.sqrt(n);
}
}