欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

672. 灯泡开关 Ⅱ

程序员文章站 2022-07-12 17:31:40
...

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

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

  1. 将所有灯泡的状态反转(即开变为关,关变为开)
  2. 将编号为偶数的灯泡的状态反转
  3. 将编号为奇数的灯泡的状态反转
  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].

==================================================

解题思路:

这个题要用递归就凉了,需要找一下规律

发现只要前三个灯泡确定,后面无论多少个灯泡,排列方式已经固定

也就是说,这个题输出最多就8种

也就是总结灯泡数小于3以及操作数小于3的情况

下面是代码

class Solution {
    public int flipLights(int n, int m) {
        n = n<3?n:3;
        return 1<<n<(1+n*m)?1<<n:(1+n*m);
    }
}

写一行的话就有点长了,分两行写吧。。。

上一篇: 319. 灯泡开关

下一篇: poj-2155 Matrix