美文网首页
672. 灯泡开关(Python)

672. 灯泡开关(Python)

作者: 玖月晴 | 来源:发表于2020-11-25 10:01 被阅读0次

    题目

    难度:★★★☆☆
    类型:数组
    方法:数学

    力扣链接请移步本题传送门
    更多力扣中等题的解决方案请移步力扣中等题目录

    现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮。在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态。

    假设这 n 只灯泡被编号为 [1, 2, 3 ..., n],这 4 个按钮的功能如下:

    将所有灯泡的状态反转(即开变为关,关变为开)
    将编号为偶数的灯泡的状态反转
    将编号为奇数的灯泡的状态反转
    将编号为 3k+1 的灯泡的状态反转(k = 0, 1, 2, ...)

    示例 1:

    输入: n = 1, m = 1.
    输出: 2
    说明: 状态为: [开], [关]

    示例 2:

    输入: n = 2, m = 1.
    输出: 3
    说明: 状态为: [开, 关], [关, 开], [关, 关]

    示例 3:

    输入: n = 3, m = 1.
    输出: 4
    说明: 状态为: [关, 开, 关], [开, 关, 开], [关, 关, 关], [关, 开, 开].
    注意: n 和 m 都属于 [0, 1000].

    解答

    这道题官方的解答已经比较的清楚了,首先,每三个灯为一个单位,所有单位的状态都是完全一样的,因此,这道题实际上只研究前三个灯就够了。

    当动作执行0次:三个灯只有[1,1,1]状态,即全亮;
    当执行任意动作1次:三个灯有[0,0,0], [0,1,0], [1,0,1],[0,1,1]四种可能状态;
    当执行任意动作2次,三个灯有除[0,1,1]之外的所有7种可能;
    当执行任意动作3次,三个灯可以取到所有8种可能。

    这里注意只有两个或者一个灯也就是n<3的情况,需要特殊对待。

    class Solution(object):
        def flipLights(self, n, m):
            n = min(n, 3)
            if m == 0:
                return 1
            if m == 1:
                return [2, 3, 4][n-1]
            if m == 2:
                return [2, 4, 7][n-1]
            return [2, 4, 8][n-1]
    

    如有疑问或建议,欢迎评论区留言~

    有关更多力扣中等题的python解决方案,请移步力扣中等题解析

    相关文章

      网友评论

          本文标题:672. 灯泡开关(Python)

          本文链接:https://www.haomeiwen.com/subject/bruwiktx.html