原题链接:https://leetcode-cn.com/problems/push-dominoes/

1、 模拟法
双指针法,把各种情况都判断一下即可。

class Solution {public:string pushDominoes(string dominoes) {int n = dominoes.size();int i = 0, j = 0; // i指向左边的L或R,j指向右边的L或Rwhile (i < n) {while (j < n && dominoes[j] == '.') j++;cout << " i is " << i << " j is " << j <<  endl; if (dominoes[i] == 'R' && dominoes[j] == 'L') { // 两边往中间到for (int x = i, y = j; x < y; ++x, --y) {dominoes[x] = 'R';dominoes[y] = 'L';}} else if (dominoes[j] == 'L') {    // 向左到for (int y = i; y < j; ++y) dominoes[y] = 'L';} else if (dominoes[i] == 'R') {    // 向右到for (int x = i; x < j; ++x) dominoes[x] = 'R';}i = j; // 将i指向j,并且j指向下一个j = i + 1;}return dominoes;}
};

2、 BFS

  1. times表示时间的传播
  2. force表示受力
  3. 对任一个骨牌在force最多有两个元素,左边和右边,倒了的骨牌就不再受力
class Solution {public:string pushDominoes(string dominoes) {int n = dominoes.size();vector<string> force(n); vector<int> times(n, -1);queue<int> q;for (int i = 0; i < n; ++i) {if (dominoes[i] == '.') continue;q.push(i);times[i] = 0;force[i].push_back(dominoes[i]);}string res = dominoes;while(q.size()) {int i = q.front();q.pop();if (force[i].size() == 1) {res[i] = force[i][0];int t = times[i];int j = (force[i][0] == 'L') ? i - 1 : i + 1;if (j < 0 || j >= n) continue;if (times[j] == -1) { // 直立的骨牌times[j] = t + 1;q.push(j);force[j].push_back(force[i][0]);} else if (times[j] == t + 1) {force[j].push_back(force[i][0]);}}}return res;}
};

leetcode算法题--推多米诺相关推荐

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

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

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

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

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

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

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

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

  5. leetcode 838.推多米诺

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

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

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

  7. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  8. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  9. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

最新文章

  1. 【网络爬虫】(1) 网络请求,urllib库介绍
  2. Java线程优先级的概念
  3. 【音频处理】Melodyne 选择工具使用 ( 主工具简介 | 修改音高 | 自动吸附 | 音符长度修改 | 长度自动吸附 | 设置音符分离线 | 设置片段分离线 )
  4. NYOJ 709 异形卵
  5. Facebook开源动画库 POP-POPBasicAnimation运用
  6. Django - - - -视图层之视图函数(views)
  7. 「兼容M1」Royal TSX for Mac 最强远程管理软件
  8. extjs树使用别的皮肤的样式_设计师发布努努重做之后的冰雪节皮肤设计稿
  9. 快速迭代的开发方式中的QA实践方法
  10. 【李宏毅机器学习】Convolutiona Neural Network 卷积神经网络(p17) 学习笔记
  11. attention 汇总(持续)
  12. mvc 执行action 获取html,Mvc--Html.ActionLink()用法
  13. Git 切换远程仓库地址三种方法
  14. 华为笔记本电脑安装 Linux 操作系统之Manjaro(手把手教学)
  15. 6U VPX 超高速信号采集处理板(XC7K325T + 4 片DSP TMS320C6678)
  16. 不同系统下的shell的不同_案例分析 | 不同安装角度下平板集热器阳台壁挂式太阳能热水系统性能分析...
  17. 关于类unix系统(linux,bsd等)克隆的资料-2
  18. mysql chunk 函数_Laravel中的chunk组块结果集处理与注意问题
  19. php后端学多久,【后端开辟】零基本php自学要多久
  20. Cef开发学习 - Windows平台简易的Cef浏览器,支持下载管理和多标签管理

热门文章

  1. python详细安装教程环境配置-[Python] 安装及环境配置
  2. python的优缺点有哪些-Python语言的优缺点有哪些
  3. python自动化测试看什么书-Python自动化测试入门,看这一篇就足以
  4. 学python可以做什么产品-学完Python可以做什么?主要用途有哪些?
  5. python在哪里学比较好-Python学习在哪里比较好?
  6. 修改项目图标_快速转换和制作图标
  7. 如何让ThinkPHP支持模糊搜索
  8. 博客基础_django_python从入门到实践_创建项目_创建应用
  9. 二叉树的前中后序递归和非递归遍历操作【代码】
  10. MaperReduce实验