|
| 1 | +// Source : https://leetcode.com/problems/bulb-switcher/ |
| 2 | +// Author : Calinescu Valentin |
| 3 | +// Date : 2015-12-28 |
| 4 | + |
| 5 | +/*************************************************************************************** |
| 6 | + * |
| 7 | + * There are n bulbs that are initially off. You first turn on all the bulbs. Then, you |
| 8 | + * turn off every second bulb. On the third round, you toggle every third bulb (turning |
| 9 | + * on if it's off or turning off if it's on). For the nth round, you only toggle the |
| 10 | + * last bulb. Find how many bulbs are on after n rounds. |
| 11 | + * |
| 12 | + * Example: |
| 13 | + * |
| 14 | + * Given n = 3. |
| 15 | + * |
| 16 | + * At first, the three bulbs are [off, off, off]. |
| 17 | + * After first round, the three bulbs are [on, on, on]. |
| 18 | + * After second round, the three bulbs are [on, off, on]. |
| 19 | + * After third round, the three bulbs are [on, off, off]. |
| 20 | + * |
| 21 | + * So you should return 1, because there is only one bulb is on. |
| 22 | + * |
| 23 | + ***************************************************************************************/ |
| 24 | + /* |
| 25 | + * Solution 1 - O(1) |
| 26 | + * ========= |
| 27 | + * |
| 28 | + * We notice that for every light bulb on position i there will be one toggle for every |
| 29 | + * one of its divisors, given that you toggle all of the multiples of one number. The |
| 30 | + * total number of toggles is irrelevant, because there are only 2 possible positions(on, |
| 31 | + * off). We quickly find that 2 toggles cancel each other so given that the start position |
| 32 | + * is always off a light bulb will be in if it has been toggled an odd number of times. |
| 33 | + * The only integers with an odd number of divisors are perfect squares(because the square |
| 34 | + * root only appears once, not like the other divisors that form pairs). The problem comes |
| 35 | + * down to finding the number of perfect squares <= n. That number is the integer part of |
| 36 | + * the square root of n. |
| 37 | + * |
| 38 | + */ |
| 39 | +class Solution { |
| 40 | +public: |
| 41 | + int bulbSwitch(int n) { |
| 42 | + return (int)sqrt(n); |
| 43 | + } |
| 44 | +}; |
0 commit comments