319 Bulb Switcher

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 ith round, you toggle every i bulb. 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.


解体思路

这是一道非常有意思的数学题。

我们进行逆向考虑,对于每一盏灯,它被开关了几次?

没错,它有几个因数,它就被开关了几次!

那么,最后亮着的,肯定被开关了奇数次,也就是说它的序号有奇数个因子,也就是说它是平方数!

那么我们只需要统计n以内有几个平方数就行了~


代码

class Solution {
public:
    int bulbSwitch(int n) {
        return floor(sqrt(n));
    }
};

你可能感兴趣的:(319 Bulb Switcher)