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