每日打卡

2022-02-21 838. 推多米诺

2022-02-21  本文已影响0人  16孙一凡通工

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);

        




    }
}
上一篇 下一篇

猜你喜欢

热点阅读