题目描述
- 来源leetcode
- 一个房间里有n个灯泡,初试均为打开状态。有4个按钮对应4种操作类型。可操作次数为m次。n,m的取值范围为[0, 1000]。
- 有四种操作类型
- flip all the lights
- flip lights with even numbers
- flip lights with odd numbers
- flip lights with (3k+1) numbers , k = 0 ,1, 2, …
- 输入 n 和 m, 输出灯泡的可能状态个数
思路解答
这是一个典型的数学问题,像脑筋急转弯,考察的不是算法套路,而是基本的分析问题的逻辑。
有8种独立的操作结果
- 1–>全关
- 2–>开,关,开,关。。。
- 3–>关,开,关,开。。。
- 4–>关,开,开,关。。。
- 1+4 –> 开,关,关,开。。。
- 2+4 –>关,关,开,开。。。
- 3+4 –> 开,开,关,关。。。
- 1+2+3 —> 全开
此外,1+2 = 3, 1+3 =2。这8种结果中,1和8针对全局,其余都是一次绑定两个灯泡,所以第4个灯泡的状态总可以由前三个推出来,因此 n = 3 足以代表所有可能的灯泡最大值。
以下每走一层,就认为自动否认了上一层的状态(等于 else if)
- m = 0 , 没有任何事情发生, outcome=

本文探讨了来源于LeetCode的灯泡开关问题,指出这是一个考察逻辑思维的数学问题。通过分析,得出存在8种独立的操作结果,并解释了如何根据操作次数n和m确定灯泡的不同状态。当m=0时,结果为1;n=1时,结果为2;n=2时,结果为4;n=3时,所有8种状态都可以达到。最后,提供了问题的代码解决方案。
最低0.47元/天 解锁文章
815

被折叠的 条评论
为什么被折叠?



