672. 灯泡开关 Ⅱ
程序员文章站
2022-07-12 17:31:40
...
现有一个房间,墙上挂有 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].
==================================================
解题思路:
这个题要用递归就凉了,需要找一下规律
发现只要前三个灯泡确定,后面无论多少个灯泡,排列方式已经固定
也就是说,这个题输出最多就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