01 02 03 04 05 06 07 08 09 10 11 12 k1 11 11 11 11 11 11 11 11 11 11 11 11 k2 00 11 00 11 00 11 00 11 00 11 00 11 k3 11 00 11 00 11 00 11 00 11 00 11 00 k4 11 00 00 11 00 00 11 00 00 11 00 00
可以看到6个一组 下面是开关影响情况: 6n+1:1 3 4 6n+2:1 2 6n+3:1 3 6n+4:1 2 4 6n+5:1 3 6n+6:1 2 可以看出,6n+3和6n+5状态相同 6n+2和6n+6状态相同。 所以分为4组。 G1:6n+1 | 1 3 4 G2:6n+2,6n+6 | 1 2 G3:6n+3,6n+5 | 1 3 G4:6n+4 | 1 2 4 可以看到, G1和G3差一个4,所以4按偶数下的时候G1和G3一样;否则不一样。 G2和G4也差个4,所以G1G3一样时(4按偶数下),G2G4一样;否则不一样。 因此,G1,G2,G3固定,G4就一定固定。
当灯泡个数n=1,可能有开关两种状态(按1关,按2开) 当灯泡个数n=2, 按一次 11 按1:00 按2:10 按3:01 按4:10 按两次 00可得到11 所以,按一次可以得到3种,两次就4种。 当灯泡个数n=3: 按一次(按照上面模式),可以得到4种;两次7种;三次可以完全得到8种。 当n>3:别的灯泡状态和前面三个一一对应了。
所以代码就很简单
class Solution {
public 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;
return presses == 2 ? 7 : 8;
}
}