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 nth round, you only toggle the last bulb. Find how many bulbs are on after n rounds.
Example:
Given n = 3.
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.
这道题比较有意思,按规律按下相应的灯泡开关,问最后有几个灯亮,题目难度为Medium。
判断每个灯泡是否亮需要知道它的开关一共按下了几次,如果是偶数次则最终是不亮的,是奇数次则是亮的。每个编号的灯泡只有在它的因子的轮数时才会被按下开关,这样判断每个灯泡最终是否亮只需要知道它的因子个数就可以了。举个栗子,编号为6的灯泡只有在第1、2、3和6轮时会被按下开关,一共4次,最终是不亮的。而大部分数的因子数都是偶数个的,除了平方数。所以除了平方数其他编号的灯泡最终都是不亮的,题目就变成了求n以内平方数的个数,问题就解决了。具体代码:
class Solution {
public:
int bulbSwitch(int n) {
return sqrt(n);
}
};