当前位置: 首页 > news >正文

【Leetcode 每日一题 - 补卡】838. 推多米诺

问题背景

n n n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。
每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。
如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。
就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。
给你一个字符串 d o m i n o e s dominoes dominoes 表示这一行多米诺骨牌的初始状态,其中:

  • dominoes[i] = ‘L’,表示第 i 张多米诺骨牌被推向左侧,
  • dominoes[i] = ‘R’,表示第 i 张多米诺骨牌被推向右侧,
  • dominoes[i] = ‘.’,表示没有推动第 i 张多米诺骨牌。

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

数据约束

  • n = d o m i n o e s . l e n g t h n = dominoes.length n=dominoes.length
  • 1 ≤ n ≤ 1 0 5 1 \le n \le 10 ^ 5 1n105
  • d o m i n o e s [ i ] dominoes[i] dominoes[i] 为 ‘L’、‘R’ 或 ‘.’

解题过程

需要考虑清楚的是,中间牌的变化,只与左右最近位置的 ‘L’ 或 ‘R’ 有关。
实际实现的时候,可以在两端增加不会影响结果的哨兵,把规律拓展到所有位置上。

具体实现

class Solution {public String pushDominoes(String dominoes) {char[] s = ("L" + dominoes + "R").toCharArray();int pre = 0;for (int i = 1; i < s.length; i++) {if (s[i] == '.') {continue;}if (s[i] == s[pre]) {Arrays.fill(s, pre + 1, i, s[i]);} else if (s[i] == 'L') {Arrays.fill(s, pre + 1, (pre + i + 1) / 2, 'R');Arrays.fill(s, (pre + i) / 2 + 1, i, 'L');}pre = i;}return new String(s, 1, s.length - 2);}
}

相关文章:

  • 掌握流量管理:利用 EKS Ingress 和 AWS 负载均衡器控制器
  • 用户模块 - IP归属地技术方案
  • TCP/IP协议深度解析:从分层架构到TCP核心机制
  • MySQL 复合查询
  • Spring AMQP源码解析
  • 英伟达语音识别模型论文速读:Fast Conformer
  • MongoDB入门详解
  • \documentclass[lettersize,journal]{IEEEtran}什么意思
  • 【计算机视觉】三维重建:tiny-cuda-nn:高性能神经网络推理与训练的CUDA加速库
  • n8n中Wait节点的使用详解:流程暂停与恢复的实战指南
  • K8S node ARP 表爆满 如何优化
  • DeepSeek-Prover-V2:数学定理证明领域的新突破
  • 20、数据可视化:魔镜报表——React 19 图表集成
  • 解决因字段过长使MYSQL数据解析超时导致线上CPU告警问题
  • 浅拷贝和深拷贝的区别
  • css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
  • 华为云Astro大屏中桥接器、连接器、转化器以及数据源、数据集、资产管理等概念梳理
  • Leetcode刷题记录30——螺旋矩阵
  • linux-文件操作
  • FreeRTOS菜鸟入门(十一)·信号量·二值、计数、递归以及互斥信号量的区别·优先级翻转以及继承机制详解
  • 山东滕州车祸致6人遇难,醉驾肇事司机已被刑事拘留
  • 什么让翻拍“语文”成为短视频新风潮
  • 一周观展|上海浦东美术馆透纳展还剩最后5天
  • 伊朗港口爆炸事故遇难人数最终确定为57人
  • Meta一季度净利增长三成:上调全年资本支出,受关税影响亚洲出口电商广告支出减少
  • 近七成科创板公司2024年营收增长,285家营收创历史新高