题目

n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。

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

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

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

给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态,其中:

dominoes[i] = ‘L’,表示第 i 张多米诺骨牌被推向左侧,
dominoes[i] = ‘R’,表示第 i 张多米诺骨牌被推向右侧,
dominoes[i] = ‘.’,表示没有推动第 i 张多米诺骨牌。
返回表示最终状态的字符串。

示例

输入:dominoes = “RR.L”
输出:“RR.L”
解释:第一张多米诺骨牌没有给第二张施加额外的力。


输入:dominoes = “.L.R…LR…L…”
输出:“LL.RR.LLRRLL…”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/push-dominoes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:模拟

通过 lastIndex时刻 的骨牌的方向将所有骨牌切割成一段一段。

1、将字符串边界加上 L 和 R (不影响原来的翻倒顺序),便于分段变换。

2、四种情况:
L…L:中间都和最左边的lastch一致
R…R:中间都和最左边的lastch一致
L…R:不做任何变换
R…L:从两边往里面倒

3、更新 lastch、lastIndex。

Java实现
class Solution {public String pushDominoes(String dominoes) {//补齐两边dominoes = "L" + dominoes + "R";char[] arr = dominoes.toCharArray();int n = arr.length;char lastCh = 'L';int lastIndex = 0;for (int i = 1; i <= n - 1; i++) {char ch = arr[i];if (ch == lastCh) {for (int j = lastIndex + 1; j < i; j++) arr[j] = ch;} else if (lastCh == 'R' && ch == 'L') {int j = lastIndex + 1, k = i - 1;while (j < k) {arr[j++] = 'R';arr[k--] = 'L';}}if (ch != '.') {lastCh = ch;lastIndex = i;}}StringBuffer res = new StringBuffer();for (int i = 1; i < n - 1; i++) res.append(arr[i]);return res.toString();}
}

力扣 838. 推多米诺相关推荐

  1. Leetcode 838. 推多米诺 C++

    Leetcode 838. 推多米诺 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻 ...

  2. leetcode 838.推多米诺

    题目地址(838. 推多米诺) https://leetcode-cn.com/problems/push-dominoes/ 题目描述 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时, ...

  3. LeetCode:838. 推多米诺————中等

    题目 838. 推多米诺 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时,同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌.同样地,倒向右边 ...

  4. 【leetcode】838. 推多米诺(模拟)

    题目: 838. 推多米诺 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时,同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌.同样地,倒向右 ...

  5. Java实现 LeetCode 838 推多米诺(暴力模拟)

    838. 推多米诺 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌. 同样地, ...

  6. LeetCode 838. 推多米诺(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相 ...

  7. 【220221】838.推多米诺

    题目:https://leetcode-cn.com/problems/push-dominoes/ BFS 逻辑:元素倒下后,状态不再改变.每个元素对应唯一的倒下时间. //官方题解 class S ...

  8. leetcode 838. Push Dominoes | 838. 推多米诺(分析每个状态)

    题目 https://leetcode.com/problems/push-dominoes/ 题解 很有趣的一道题,不难,L R 的状态组合是有限的,只要分析出每个状态应该怎么处理,然后模拟就好了. ...

  9. 算法题 推多米诺 模拟、队列与黑魔法

    推多米诺 模拟.队列与黑魔法 题目 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时,同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌.同样地 ...

最新文章

  1. 面试官:Java中 serialVersionUID 的作用是什么?举个例子说明
  2. 如何使用Swift获取App版本和内部版本号?
  3. 中美程序员的不完全对比,看看跟你了解的一样吗?
  4. VTK:Picking之HighlightSelectedPoints
  5. 百度外卖接口调试 C#版
  6. 虚拟化(8)_Docker容器
  7. MySQL为什么有时候会选错索引?
  8. historyReverser array reverse
  9. linux以下哪个属于块设备,1222.在大多数Linux发行版本中,以下哪个属于块设备( )...
  10. 去掉Win7资源管理器左侧不需要的项目
  11. 时间戳服务器显示invalid,signtool签名时间戳失败的解决方法
  12. Python内置函数ord()与chr()
  13. 西瓜书重温(二): 模型评估与选择
  14. android 主题是什么,什么是Android中的AppCompat主题?
  15. android rom root权限,教你刷机包获取ROOT权限的方法
  16. 运行深度学习代码时报错RuntimeError: CUDA out of memory. Tried to allocate 482.00 MiB
  17. APK反编译工具使用教程
  18. 霹雳吧啦Wz语义分割学习笔记P7
  19. for what? so what?
  20. 【网络经济与企业管理】选择题,错题

热门文章

  1. fractions库的使用
  2. VBS奇葩操作 “我是猪”
  3. python tensorflow学习笔记(六)最小二乘法
  4. 2015年最新苹果开发者账号注册流程详解
  5. CAD怎么设置十字光标大小?CAD十字光标设置
  6. 奈雪的茶“快跑”,喜茶“慢行”
  7. DSP TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制时的噪声抑制
  8. 笔记本式计算机处理器,问答:笔记本电脑如何选择处理器
  9. i5-1135g7是标压还是低压 i5 1135g7是集成显卡么
  10. 谷歌文件系统论文中文版