672. Bulb Switcher II
There is a room with n bulbs labeled from 1 to n that all are turned on initially, and four buttons on the wall. Each of the four buttons has a different functionality where:
- Button 1: Flips the status of all the bulbs.
- Button 2: Flips the status of all the bulbs with even labels (i.e., 2, 4, …).
- Button 3: Flips the status of all the bulbs with odd labels (i.e., 1, 3, …).
- Button 4: Flips the status of all the bulbs with a label j = 3k + 1 where k = 0, 1, 2, … (i.e., 1, 4, 7, 10, …).
You must make exactly presses button presses in total. For each press, you may pick any of the four buttons to press.
Given the two integers n and presses, return the number of different possible statuses after performing all presses button presses.
Example 1:
Input: n = 1, presses = 1
Output: 2
Explanation: Status can be:
- [off] by pressing button 1
- [on] by pressing button 2
Example 2:
Input: n = 2, presses = 1
Output: 3
Explanation: Status can be:
- [off, off] by pressing button 1
- [on, off] by pressing button 2
- [off, on] by pressing button 3
Example 3:
Input: n = 3, presses = 1
Output: 4
Explanation: Status can be:
- [off, off, off] by pressing button 1
- [off, on, off] by pressing button 2
- [on, off, on] by pressing button 3
- [off, on, on] by pressing button 4
Constraints:
- 1 <= n <= 1000
- 0 <= presses <= 1000
From: LeetCode
Link: 672. Bulb Switcher II
Solution:
Ideas:
-
If n == 1, bulb 1 only — at most 2 unique states.
-
If n == 2, up to 4 states are possible, but if presses == 1, only 3 are reachable.
-
For n >= 3:
-
presses == 1 → 4 possible outcomes
-
presses == 2 → 7 possible outcomes
-
presses >= 3 → all 8 outcomes are possible (maximum)
-
Code:
int flipLights(int n, int presses) {
if (presses == 0) return 1;
if (n == 1) return 2;
if (n == 2) return presses == 1 ? 3 : 4;
if (presses == 1) return 4;
if (presses == 2) return 7;
return 8;
}