题目来源
题目描述
class Solution {
public:
int flipLights(int n, int presses) {
}
};
题目解析
题目大意:一共有n个灯(刚开始时所有灯都是亮的),4个开关
- 可以做presses次操作, 每次对所有开关做操作
- 最后灯有几种状态
额,不会做。脑子不够用。。这个题被踩了这么多下,其实没有做的必要了。
分析
找规律
第一个,我们需要明确的是,我们无需考虑按钮的顺序,只需要考虑每个按钮被按了几次,在按钮次数一样的情况下,顺序并不会影响最后的状态。更进一步的,不需要考虑每个按钮具体被按了几次,而只需要考虑被按了奇数次还是偶数次即可。
然后,我们观察每个按钮的结果,先尝试从最简单的情况开始举例子:
- 假设需要按x次,只有第1种按钮可以按
- 假设需要按x次,只有第2种按钮可以按
- 假设需要按x次,只有第3种按钮可以按
- 假设需要按x次,只有第4种按钮可以按
对于n盏灯,有如下效果:
即先找出每个开关影响的灯。观察上面的数组,我们可以发现以6盏灯为1组,都是重复的pattern,所以我们可以把重复的pattern去掉而不会影响结果。如果n大于6,我们则对其取余再加上6,新的n跟使用原来的n会得到同样的结果。
每种开关只关心次数,不关心顺序,且次数只关心奇偶
class Solution {
public:
int flipLights(int n, int presses) {
if(presses==1)//presses为1或2是特殊情况,n为1或2也时特殊情况,单独讨论
{
if(n==1)return 2;
if(n==2)return 3;
if(n>=3)return 4;
}
if(presses==2)
{
if(n==1)return 2;
if(n==2)return 4;
if(n>=3)return 7;
}
if(presses>=3)
{
if(n==1)return 2;
if(n==2)return 4;
if(n>=3)return 8;
}
return 1;
}
};
类似题目
题目 | 思路 |
---|---|
leetcode:319. 灯泡开关 Bulb Switcher | |
leetcode:672. 灯泡开关 Ⅱ Bulb Switcher II | |
leetcode:995. 连续K位翻转的最小次数 Minimum Number of K Consecutive Bit Flips |