我的思路
1、特殊情况:
presses为0时,说明不能按,答案为一种;
presses为1时(示例给出了答案),n<=3时为n+1;n>3时为4;
2、暴力想法,不考虑重复结果:按 presses 次,每次有 4 种选择,那么一共有 4^presses 种按动选择
3、开关按动的顺序不影响最后的灯泡的结果:将全排列问题变成了组合问题。
4、某开关如果按了偶数次,他的效果会负负得正抵消掉;只有按奇数次才能有效。
想不出答案
答案题解
**分析:**为什么得出这样的结论?
**已知:**按钮1影响所有(周期为1)、按钮2影响偶数(周期为2)、按钮3影响奇数(周期为2)、按钮4影响(1、4、7)【倍数3余1】(周期为3)的灯泡。
合起来,影响周期为6(2和3的公倍数)。
- 下图来源:灯泡开关 Ⅱ【找规律】
因此我们只需要观察前六盏灯的状态。
知道规律之后,代码就很简单了
class Solution:
def flipLights(self, n: int, presses: int) -> int:
# 0、特殊情况
if presses == 0 : return 1
if n == 1: return 2
if n == 2: return 3 if presses == 1 else 4
# n >= 3
if presses == 1:
return 4
else:
return 7 if presses == 2 else 8