1 题目
There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the i-th round, you toggle every i bulb. For the n-th round, you only toggle the last bulb. Find how many bulbs are on after n rounds.
Example:
Input: 3
Output: 1
Explanation:
At first, the three bulbs are [off, off, off].
After first round, the three bulbs are [on, on, on].
After second round, the three bulbs are [on, off, on].
After third round, the three bulbs are [on, off, off].
So you should return 1, because there is only one bulb is on.
2 尝试解
2.1 分析
有N个灯泡,初始全部关闭,在第i个回合,拨动第k*i个灯泡的开关(k=1,2,3....),即第1回合全部打开,第2回合关闭第2个、第4个、第6个....灯泡的开关。问第N回合后,还有几个灯泡亮着。
考虑灯泡i,其开关被拨动了f(i)次,f(i)是i所有的因子数。对于小于√i的因子,一定有一个大于√i的因子与之对应,拨动两次后,状态不变。只有√i恰好为其因子时,只能拨动一次,状态改变。所以其实是问小于等于i的平方数有几个。
2.2 代码
class Solution {
public:
int bulbSwitch(int n) {
return sqrt(n);
}
};
3 标准解
class Solution {
public:
int bulbSwitch(int n) {
return sqrt(n);
}
};