C++实现的灯泡开关 II
假设一个房间里有 n 盏初始状态为打开的灯,墙上安装了 4 个按钮。在对按钮进行了正好 m 次未知操作后,我们需要返回 n 盏灯有多少种不同的状态组合。假设 n 盏灯分别标记为 [1, 2, 3 ..., n],这 4 个按钮的功能如下:
- 翻转所有灯。
- 翻转偶数编号的灯。
- 翻转奇数编号的灯。
- 翻转 (3k + 1) 编号的灯,k = 0, 1, 2, ...
现在如果 n = 3 且 m = 1,那么将会有 4 种操作,它们分别是:[关,开,关],[开,关,开],[关,关,关],[关,开,开]
为了解决这个问题,我们将遵循以下步骤:
- 如果 n 为 0 或 m 为 0,则返回 1
- 如果 n 为 1,则返回 2
- 如果 n 为 2,当 m 为 1 时返回 3,否则返回 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
广告