假设有一个房间,其中最初打开的是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