Leetcode 672.灯泡开关II

Posted kexinxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 672.灯泡开关II相关的知识,希望对你有一定的参考价值。

灯泡开关II

现有一个房间,墙上挂有 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].

 

我们将3k+1的值定义为内部值,非3k+1的值定义为外部值,

容易发现,当n>=4的时候,内部值和外部值都有计数和偶数,这里还有一个规律,就是对于一组n,m能够得到的灯泡状态,进行奇数次变换或者是偶数次变换之后能够变回开始的状态,因此对于n,m2,m2>=m+2包含n,m的所有状态

当n=1的时候,当m=1的时候包含全部两种状态,m=2的时候包含全部两种状态,m>2的时候包含m=1的时候的全部状态,所以返回2

当n=2的时候,当m=1的时候包含3种状态,m=2的时候包含4种状态,m=3包含全部状态,m>3的时候包含m=2的全部状态也就是全部2种状态

当n>2的时候,当m=1的时候包含7种状态,当m=2的时候包含8种状态,m=3的时候包含全部8种状态,m>3的时候包含m=2的全部状态也就是8种状态

 

 1 class Solution {
 2     public int flipLights(int n, int m) {
 3         if(m==0) return 1;
 4         if(n==1) return 2;
 5         if(n==2){
 6             if(m==1) return 3;
 7             else{
 8                 return 4;
 9             }
10         }
11         if(m==1) return 4;
12         if(m==2) return 7;
13         return 8;
14     }
15 }

 

以上是关于Leetcode 672.灯泡开关II的主要内容,如果未能解决你的问题,请参考以下文章

672. Bulb Switcher II 灯泡切换器II

leetcode-灯泡开关 Ⅱ

《LeetCode之每日一题》:208.灯泡开关

[LeetCode]319. Bulb Switcher灯泡开关

LeetCode 319 灯泡开关[数学] HERODING的LeetCode之路

LeetCode 520. 检测大写字母 / 677. 键值映射 / 319. 灯泡开关