zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 838 推多米诺(暴力模拟)

    838. 推多米诺

    一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。

    在开始时,我们同时把一些多米诺骨牌向左或向右推。

    在这里插入图片描述

    每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。

    同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。

    如果同时有多米诺骨牌落在一张垂直竖立的多米诺骨牌的两边,由于受力平衡, 该骨牌仍然保持不变。

    就这个问题而言,我们会认为正在下降的多米诺骨牌不会对其它正在下降或已经下降的多米诺骨牌施加额外的力。

    给定表示初始状态的字符串 “S” 。如果第 i 张多米诺骨牌被推向左边,则 S[i] = ‘L’;如果第 i 张多米诺骨牌被推向右边,则 S[i] = ‘R’;如果第 i 张多米诺骨牌没有被推动,则 S[i] = ‘.’。

    返回表示最终状态的字符串。

    示例 1:

    输入:".L.R…LR…L…"
    输出:“LL.RR.LLRRLL…”
    示例 2:

    输入:“RR.L”
    输出:“RR.L”
    说明:第一张多米诺骨牌没有给第二张施加额外的力。
    提示:

    0 <= N <= 10^5
    表示多米诺骨牌状态的字符串只含有 ‘L’,‘R’; 以及 ‘.’;

    class Solution {
          public String pushDominoes(String dominoes) {
            char[] d = dominoes.toCharArray();
            int l = -1;
            for (int r = 0; r <= d.length; r++) {
                if (r == d.length || d[r] != '.') {
                    char charL = l == -1 ? 'L' : d[l];
                    char charR = r == d.length ? 'R' : d[r];
                    if (charL == charR) {
                        while (l + 1 < r)
                            d[++l] = charL;
                    } else if (charR == 'L') {
                        int i = r;
                        while (l + 2 < i) {
                            d[++l] = charL;
                            d[--i] = charR;
                        }
                    }
                    l = r;
                }
            }
            return new String(d);
        }
     
    }
    
  • 相关阅读:
    网站被刷导致404解决
    vim常用
    curl, wget常用选项
    使用paramiko远程登录并执行命令脚本
    批量监测dns是否可用脚本,不可用时并切换
    shell脚本收集服务器基本信息并入库
    沃通SSL证书及国密SSL证书入驻百度云市场
    电子合同,相比纸质合同有哪些好处?
    DV型域名https证书的优点及申请流程
    Chrome 浏览器显示“网站连接不安全”,是什么原因?
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946059.html
Copyright © 2011-2022 走看看