C ++中的灯泡切换器II

假设有一个房间,其中最初打开的是n个灯,墙上有4个按钮。在对按钮执行了确切的m个未知操作之后,我们需要返回n个灯可能有多少种不同类型的状态。因此,考虑将n个灯标记为数字[1、2、3 ...,n],这4个按钮的功能如下-

  • 翻转所有的灯。

  • 偶数的翻转灯。

  • 翻转带奇数的灯。

  • 翻转灯具有(3k + 1)个数字,k = 0、1、2,...

现在,如果n = 3且m = 1,则将有4种运算,分别是[off,on,off],[on,off,on],[off,off,off],[off,on,on ]

为了解决这个问题,我们将遵循以下步骤-

  • 如果n为0或m为0,则返回1

  • 如果n为1,则返回2

  • 如果n为2,则返回3,当m为1时,否则返回4

  • 如果m为1,则返回4

  • 如果m为2,则返回7,否则返回8。

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int flipLights(int n, int m) {
      if (m == 0 || n == 0) return 1;
      if (n == 1) return 2;
      if (n == 2) return m == 1? 3:4;
      if (m == 1) return 4;
      return m == 2? 7:8;
   }
};
main(){
   Solution ob;
   cout << (ob.flipLights(3, 1));
}

输入值

3
1

输出结果

4