//只需要考虑前6位的状态,i这种状态和i+6这个状态是一样的
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.HashSet;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.flipLights(3,2));
}
public int flipLights(int n, int presses) {
n = Math.min(n,6);
char[] arr = new char[n];
for (int i = 0; i < n; i++) {
arr[i] = '1';
}
ArrayDeque<char[]> deque = new ArrayDeque<>();
deque.add(arr);
int step = 0;
while (!deque.isEmpty() && step < presses) {
ArrayDeque<char[]> nextDeque = new ArrayDeque<>();
step++;
HashSet<String> set = new HashSet<>();
while(!deque.isEmpty()){
char[] state = deque.poll();
char[] newState = new char[n];
for (int i = 0; i < n; i++) {
newState[i] = state[i] == '1' ? '0' : '1';
}
if (!set.contains(new String(newState))) {
set.add(new String(newState));
nextDeque.offer(Arrays.copyOf(newState,n));
}
for (int i = 0; i < n; i++) {
if (i % 2 == 1) {
newState[i] = state[i];
} else {
newState[i] = state[i] == '1' ? '0' : '1';
}
}
if (!set.contains(new String(newState))) {
set.add(new String(newState));
nextDeque.offer(Arrays.copyOf(newState,n));
}
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
newState[i] = state[i];
} else {
newState[i] = state[i] == '1' ? '0' : '1';
}
}
if (!set.contains(new String(newState))) {
set.add(new String(newState));
nextDeque.offer(Arrays.copyOf(newState,n));
}
for (int i = 1; i <= n; i++) {
if (i % 3 != 1) {
newState[i - 1] = newState[i - 1];
} else {
newState[i - 1] = newState[i - 1] == '1' ? '0' : '1';
}
}
if (!set.contains(new String(newState))) {
set.add(new String(newState));
nextDeque.offer(Arrays.copyOf(newState,n));
}
}
deque = nextDeque;
}
return deque.size();
}
}