Always keep a beginner's mind, don't forge|

fishcanfly

园龄:8年10个月粉丝:0关注:4

【672. 灯泡开关 Ⅱ】状态空间缩小

复制代码
//只需要考虑前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(); } }
复制代码

 

本文作者:fishcanfly

本文链接:https://www.cnblogs.com/fishcanfly/p/16348941.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   fishcanfly  阅读(23)  评论(2编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起