java版本:
class Solution {
public String pushDominoes(String dominoes) {
// -- ++
// 一秒一秒算
// 记录所有的非...节点 记录 loc time==1 dir=-1 or 1
//用个队列记录,dir!=0的节点改变周遭节点,并加入队列当中
//终止情况在越界和dom==点点的时候
//时间数组 dir记录改变时间
// 两侧同时有相反的力的时候,这个时候需要将 time+1的时间点变回.
// loc time state
char[] dom= dominoes.toCharArray();
int state=0,dire=0;
int n=dominoes.length();
int[] arr;
int[] dir=new int[n];
ArrayDeque<int[]> queue=new ArrayDeque<>();
// char[] do=dominoes.toCharArray();
for(int i=0;i<n;i++){
if(dominoes.charAt(i)=='.'){
continue;
}
dire=dominoes.charAt(i)=='L'?-1:1;
queue.add(new int[]{i,1,dire});
dir[i]=1;
}
while(!queue.isEmpty()){
arr=queue.poll();
int loc=arr[0],time=arr[1],dir_queue=arr[2];
int move=loc+dir_queue;
if(dom[loc]=='.' || move<0 || move>=n){
continue;
}
if(dir[move]==0){
time++;
queue.add(new int[]{move,time,dir_queue});
dir[move]=time;
dom[move]=dir_queue==-1?'L':'R';
}else if(dir[move]==time+1){
dom[move]='.';
}
}
return String.valueOf(dom);
}
}
网友评论