672.灯泡开关2|数学推理|6个周期|影响开关

这篇博客探讨了一个关于灯泡开关的问题,其中四个开关分别影响不同周期的灯泡。当按下开关次数为presses时,根据灯泡的周期性和按动次数的奇偶性,可以确定点亮灯泡的数量。博主提供了特殊情况下(presses为0、1、2时)的答案,并给出了一般情况下的解题思路,包括观察灯泡状态的周期性和利用组合问题简化计算。最后,博主给出了Python代码实现来解决这个问题。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
我的思路
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值