思路:双指针

  • 两个相邻的被推倒的牌互不影响。
  • 一张站立的牌(".")的最终状态与离其两侧最近的 “L” 或 “R” 有关。

可以使用「双指针」的方式寻找 "."左右两边距离最近的被推倒的牌,形成"X....Y"型的区间。

1、'R......R' => 'RRRRRRRR'
2、'L......L' => 'LLLLLLLL'
3、'L......R' => 'L......R'
4、'R......L' => 'RRRRLLLL' or 'RRRR.LLLL'(此时需判断中间‘.’的个数奇偶)
  1. l指向当前区间的开始( “L” 或者 “R”);
  2. r跳过所有的 “.”,指向当前区间的结束( “L” 或者 “R”)。
  3. 此时区间的形状为 “X…Y”,判断这个区间左右端点的 “X”、 "Y"是什么,确定中间的 "."的状态。
  4. 由于可能存dominoes最左边和最右边都是 ".",那么形成不了"X…Y" 这样的区间。所以,给dominoes最左边添加了一个 “L”,最右边添加了一个 “R”,这样不会影响dominoes内部所有的牌的倒向,但是有助于我们形成区间,而且这两个添加的牌,也不会放到最终结果里。
class Solution {public String pushDominoes(String dominoes) {dominoes = "L" + dominoes + "R";int l = 0;StringBuilder res = new StringBuilder();for(int r=l;r<dominoes.length();r++){if(dominoes.charAt(r)=='.') continue;//r 跳过‘.’,找到当前区间的最右if(l!=0) res.append(dominoes.charAt(l));//最左侧虚拟牌不加int mid=r-l-1;//中间有多少个‘.’,判断奇偶if(dominoes.charAt(l)==dominoes.charAt(r)){//情况1、2、for(int i=0;i<mid;i++) res.append(dominoes.charAt(l));}else if (dominoes.charAt(l) == 'L' && dominoes.charAt(r) == 'R') {//情况3、for(int i=0;i<mid;i++) res.append('.');}else{//情况4、for(int i=0;i<mid/2;i++) res.append('R');if(mid%2==1) res.append('.');for(int i=0;i<mid/2;i++) res.append('L');}l=r;}return res.toString();}
}

leetcode【中等】838、推多米诺相关推荐

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

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

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

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

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

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

  4. leetcode 838.推多米诺

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

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

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

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

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

  7. 力扣 838. 推多米诺

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

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

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

  9. leetcode算法题--推多米诺

    原题链接:https://leetcode-cn.com/problems/push-dominoes/ 1. 模拟法 双指针法,把各种情况都判断一下即可. class Solution {publi ...

  10. 【220221】838.推多米诺

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

最新文章

  1. 2021.8.21 网易秋招开发笔试(题目 + java代码)
  2. loss函数为何选交叉熵
  3. python多边形裁剪
  4. 字节跳动AI副总裁离职,将加入清华大学张亚勤团队
  5. Windows网络接口API函数
  6. [邻接表] 学习邻接表的表示方法+BFS
  7. [一个经典的多线程同步问题]解决方案一:关键段CS
  8. pandas使用笔记(二)列操作
  9. 计蒜课挑战难题:罗马数字转换成整数
  10. set, unordered_set模板类
  11. python open 文件操作
  12. 安装和运行,意思差异应该很明显
  13. HighNewTech:新物种?这是一种不需要写代码的程序猿,这事,得从Ta们掌握了 iVX工具(首个无代码编程语言)说起……
  14. c#随机产生常用汉字
  15. 通过hive将excel文件_hive 之 将excel数据导入hive中 : excel 转 txt
  16. 微信小程序开发实例——人脸识别开放平台
  17. 解释:什么是木马、蠕虫、病毒
  18. matlab cody学习笔记 day18
  19. 我是一个*** (二)
  20. IDEA打包jar包,以及exe应用程序。

热门文章

  1. [Err] 23000 - [SQL Server]不能在具有唯一索引 'IX_student_info_2' 的对象 'dbo.student_info' 中插入重复键的行
  2. 小白练习cocos creator——property用法记录
  3. 3种在JavaScript中验证电子邮件地址的方法
  4. hive修复多级分区
  5. mysql 5.5 slow log_mysql5.5开启慢日志slowlog的方法(log_slow_queries)_MySQL
  6. 疫情下的生鲜配送,数字供应链发挥了重大作用
  7. aspose实现word,excel在线预览
  8. 自控力读书笔记:第三章 累到无力抵抗:为什么自控力和肌肉一样有极限?
  9. 探索ELF可执行文件的“干货”:段头表和段的基本介绍
  10. 专为博客们设计的概念产品bloger | 奇事奇物网