来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/push-dominoes

题目描述

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

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

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

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

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

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

示例 1:

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

示例 2:

输入:dominoes = ".L.R...LR..L.."
输出:"LL.RR.LLRRLL.."

提示:

n == dominoes.length
1 <= n <= 105
dominoes[i] 为 'L'、'R' 或 '.'

解题思路

很需要逻辑的一道题。可以对每一块多米诺牌进行受力分析,首先从右往左遍历,用viRight记录第i张牌受到的向左的力优先级,数字越小说明力越大,如果数字为0则表示没有受到力。然后从左往右依次遍历多米诺牌,判断向右的力的优先级,与向左的力优先级进行比较,对于树立的多米诺牌,更改多米诺牌的状态。

代码展示

class Solution {
public:
string pushDominoes(string dominoes) {
vector<int> viRight(dominoes.size(), 0);
int iTemp = 0;
for (int i = dominoes.size() - 1; i >= 0; i--)
{
if (dominoes[i] == 'L')
{
iTemp = 1;
}
else if (dominoes[i] == 'R')
{
iTemp = 0;
}
else
{
if (iTemp)
iTemp++;
}
viRight[i] = iTemp;
}
iTemp = 0;
for (int i = 0; i < dominoes.size(); i++)
{
if (dominoes[i] == 'R')
{
iTemp = 1;
}
else if (dominoes[i] == 'L')
{
iTemp = 0;
}
else
{
if (iTemp)
iTemp++;
}
if (dominoes[i] == '.')
{
if (viRight[i]!= 0 && iTemp > viRight[i] || !iTemp && viRight[i])
{
dominoes[i] = 'L';
}
else if (iTemp != 0 && iTemp < viRight[i] || !viRight[i] && iTemp)
{
dominoes[i] = 'R';
}
}
}
return dominoes;
}
};

运行结果

LeetCode-838 推多米诺的更多相关文章

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

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

  2. [LeetCode] Push Dominoes 推多米诺骨牌

    There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...

  3. [Swift]LeetCode838. 推多米诺 | Push Dominoes

    There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...

  4. LeetCode.1128-等价多米诺骨牌对的数量(Number of Equivalent Domino Pairs)

    这是小川的第394次更新,第428篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第259题(顺位题号是1128).给定多米诺骨牌列表,当且仅当(a == c且b == d ...

  5. Java实现 LeetCode 790 多米诺和托米诺平铺(递推)

    790. 多米诺和托米诺平铺 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- &q ...

  6. [LeetCode] Domino and Tromino Tiling 多米诺和三格骨牌

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...

  7. 【LeetCode】1128. Number of Equivalent Domino Pairs 等价多米诺骨牌对的数量(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计 代码 复杂度分析 日期 题目地址:http ...

  8. [leetcode]1007. 行相等的最少多米诺旋转

    在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分.(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字.) 我们可以旋 ...

  9. 省选训练赛第4场D题(多米诺骨牌)

    题目来自FZU2163 多米诺骨牌 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Vasya很喜欢排多米诺 ...

  10. [Swift]LeetCode790. 多米诺和托米诺平铺 | Domino and Tromino Tiling

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...

随机推荐

  1. .netcore项目docker化,以及docker之间通信

    简言: 最近刚完成公司的新系统,系统使用的是微服务架构,由于领导说要将服务docker化.下面将我的研究结果分享出来,如若有错误的地方,还请各位多多指点. 目录: 什么是docker? 使用docke ...

  2. uni-app 动态修改主题色

    老是碰到初版制作完成没多久,就整一出说什么要更改整个项目的色彩体系.真的是宝宝心里苦啊! 起初都是通过uni项目自带的uni.scss中定义,在替换页面上对应的css.以便于达到一次性修改整体布局的样 ...

  3. docker 第二课

    构建nginx镜像 Dockerfile 指令: FROM centos:7.9.2009 #在整个dockfile文件中除了注释之外的第一行,要是FROM ,FROM 指令当前镜像的用于指定父镜像( ...

  4. java逻辑运算&&与&的区别

    本文主要阐述&&(短路与)和&(逻辑与)的运算异同:a && b 和 a&b : 共同之处是只有a和b同时为真时,结果才为真,否则为假 不同点在于 a ...

  5. 「Goravel 上新」验证表单的三种新姿势,估计你只用过一种

    验证用户输入的数据是我们开发中最常见的需求,Goravel 提供三种验证姿势,个个简单好用! 第一种:简单直接式 根据表单内容直接校验: func (r *PostController) Store( ...

  6. Educational Codeforces Round 141 (Rated for Div. 2) A-E

    比赛链接 A 题意 给一个数组 \(a\) ,要求重排列以后 \(a[i] \neq a[1,i-1]\) ,其中 \(a[1,i-1]\) 是前 \(i-1\) 项和. 如果无解则输出 NO :否则 ...

  7. [Leetcode]寻找峰值

    题目 思路 如果常规解法不考虑时间复杂度,直接遍历即可得到峰值,时间复杂度为O(n),题目要求O(logn),因此我们需要使用二分法. 首先考虑题目要求:nums[-1]=nums[n]=-∞,因此在 ...

  8. iOS Reveal 4 安装详解简单粗暴

    项目在测试的时候,然后拿了公司最低配置的ipod 来装我们的项目,但是呢,我们的项目居然掉帧很厉害,然后看了一下别人的app,居然不卡,然后就想去看看,别人是怎么做到的.然后呢?就走上了Reveal之 ...

  9. 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高主频产品(2023)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内Cortex-M内核MCU厂商高主频产品. 在 2021 年初痞子衡写了篇 <盘点国内Cortex-M内核MCU厂商高性能产品 ...

  10. 送给vue初学者的 vue.js技巧

    1.setTimeout/ setInterval 场景一 :this指向改变无法用this访问vue实例 mounted(){ setTimeout( function () { //setInte ...