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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP