推多米诺

2023-11-13

LeetCode 838

推多米诺

一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。

在开始时,我们同时把一些多米诺骨牌向左或向右推。

每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。

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

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

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

给定表示初始状态的字符串 “S” 。如果第 i 张多米诺骨牌被推向左边,则 S[i] = ‘L’;如果第 i 张多米诺骨牌被推向右边,则 S[i] = ‘R’;如果第 i 张多米诺骨牌没有被推动,则 S[i] = ‘.’。

示例 1:

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

示例 2:

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

解法:相邻标记

解题思路:

我们假设每一个’.‘都是被包在’L’,'R’之间,那么就有以下的情况:

  • 如果我们有 “A…B”,当 A = B,那么就变成 “AAAAAA”。
  • 如果我们有 “R…L”,那么结果会变成 “RRRLLL” 或者 “RRR.LLL” 如果点的个数是奇数。如果初始标记的坐标是 i 和 j,我们可以检查距离 k-i 和 j-k 来决定位置 k 的形态是 ‘L’,‘R’ 还是 ‘.’。
  • 如果我们有 “L…R”,就什么都不做,跳过。

代码如下:

class Solution {
    public String pushDominoes(String dominoes) {
        int N = dominoes.length();
        int[] indexes = new int[N+2];
        char[] symbols = new char[N+2];
        int len = 1;
        indexes[0] = -1;
        symbols[0] = 'L'; //左边界,主要是为了使第一个元素也能被'L','R'包起

        for (int i = 0; i < N; ++i)
            if (dominoes.charAt(i) != '.') 
            {
                indexes[len] = i;
                symbols[len++] = dominoes.charAt(i);
            }

        indexes[len] = N;
        symbols[len++] = 'R'; //同理
        char[] ans = dominoes.toCharArray();
        for (int index = 0; index < len - 1; ++index) //遍历每一对'L','R'
        {
            int i = indexes[index], j = indexes[index+1];
            char x = symbols[index], y = symbols[index+1];
            char write;
            if (x == y) 
            {
                for (int k = i+1; k < j; ++k)
                    ans[k] = x;
            } 
            else if (x > y) 
            { // RL
                for (int k = i+1; k < j; ++k)
                    ans[k] = k-i == j-k ? '.' : k-i < j-k ? 'R' : 'L';
            }
        }

        return String.valueOf(ans);
    }
}

解法来源

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推多米诺 的相关文章

  • ssm框架+Layui整合案例

    业余写得整合案例 想学习的可以来参考 初来乍到 准备工作 Layui tomcat mysql 目录 1 实现的效果图 2 实现代码 2 0 前端代码 2 1 登录页面login jsp 2 2 登录后跳转的主页面 main jap web

随机推荐

  • SQLi LABS Less-22

    第22关使用POST请求提交参数 对账号和密码中的特殊字符执行了转译的操作 难度较大 这一关的重点在于Cookie 用户登录成功后 将base64编码后的用户名保存到Cookie中 点击提交按钮时 会从Cookie中获取用户名 使用base
  • Yum update和upgrade的区别

    Yum update和upgrade的区别 Linux yum中package升级命令有两个分别是 yum upgrade 和 yum update 1 区别 默认情况下 yum update和yum upgrade的功能是完全一样的 都是
  • 基于.NET CORE 3.1的WEB API通过EF CORE连接MySQL

    基于 NET CORE 3 1的WEB API通过EF CORE连接MySQL 注 本文不采用CodeFirst 不使用迁移 1 准备好一个WEB API项目 可以看我之前的文章 2 准备好一个MySQL数据库并创建表 3 引用nuget包
  • 神经网络学习小记录44——训练资源汇总贴

    神经网络学习小记录44 训练资源汇总贴 前言 权值文件 1 迁移学习 传统神经网络 2 目标检测 a keras权重 b pytorch权重 c tensorflow2权重 3 实例分割 4 语义分割 旧版 5 语义分割 新版 a kera
  • nginx请求返回html文件,nginx返回json或者文本格式的方法

    用nginx怎么返回json格式或者文本格式的数据 其实很简单 如下代码 1 返回文本格式 location get text default type text html return 200 hello world 2 返回json格式
  • sublime配置go环境_Win10下sublime text3搭建go语言开发环境--工具篇

    进行 go 语言开发环境的搭建 最近进行了大量的搜索 因为在搭建的过程中遇到了挺多的问题 先介绍搭建的环境 系统 Win10 IDE sublime text3 相关插件 GoSublime 这篇文会介绍如下几个部分 1 下载Golang
  • 知道 Redis RDB 这些细节,可以少踩很多坑

    在使用 Redis 的过程中 你是否遇到过下面这些问题 开启 RDB 落盘 业务频繁出现请求超时 除了 save 和 bgsave 命令 还有哪些操作会触发 RDB 落盘 执行了 flushall 发现 flushall 之前写的数据又冒出
  • 根据传入的年份和月份获取该月属于本年的第几周和每周的开始和结束日期

    function getInfo year month var getInfo function year month var d new Date d setFullYear year month 1 1 var w1 d getDay
  • unity学习笔记-unity(2019)实现与as相互跳转

    Unity学习笔记 Unity 2019 嵌入安卓开发 实现相互跳转 思路 流程 先在unity中添加跳转到安卓的方法 AS配置unity的信息 2021 5 27更新一下 as添加跳转至unity的方法 as添加unity跳转到app的方
  • 8086CPU只有16位寄存器,却可以访问20位的物理地址

    一 背景介绍 Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片 是x86架构的鼻祖 它是以8080和8085的设计为基础 拥有类似的寄存器组 但是数据总线扩充为16位 总线界面单元 Bus Interface U
  • javafx实现登录注册界面

    package sample import JavaBigJob BaseScene import javafx scene Parent import javafx scene layout Pane import javafx appl
  • 前端学习总结:5、Bootstrap

    前端学习总结 5 Bootstrap 文章目录 前端学习总结 5 Bootstrap 1 前言 2 资料 3 下载安装 Bootstrap 4 Bootstrap css 按钮 5 Bootstrap css 表格 6 Bootstrap
  • ZYNQ PL开发流程

    2 ZYNQ PL开发 开发流程 开发使用vivado 流程如下 1 新建工程 工程项目含义 这里简单介绍下各个工程类型的含义 RTL Project 是指按照正常设计流程所选择的类型 这也是常用的一种类型 RTL Project 下的 D
  • 《大话数据结构》-程杰 读书笔记

    认为程序设计的实质是对确定的问题选择一种好的结构 加上设计一种好的算法 可见 数据结构在程序设计当中占据了重要的地位 程序设计 数据结构 算法 要你相信自己一定可以学得会 学得好 既然无数人已经掌握了 你凭什么不行 于每个链表来说 它所占用
  • CentOS中安装docker-compose

    下载安装包 wget https github com docker compose releases download v2 2 3 docker compose linux x86 64 移动到 usr local bin 目录 mv
  • 【VUE3源码学习】nextTick 实现原理

    什么是nextTick 定义 在下次 DOM 更新循环结束之后执行延迟回调 在修改数据之后立即使用这个方法 获取更新后的 DOM 看完这个定义不免心生疑问 下次 DOM 更新循环结束之后是什么时候 执行延迟回调 更新后的 DOM 基于以上问
  • 使用 MMDETECTION 和 LABEL-STUDIO 进行半自动化目标检测标注

    标注数据是一个费时费力的任务 本文介绍了如何使用 MMDetection 中的 RTMDet 算法联合 Label Studio 软件进行半自动化标注 具体来说 使用 RTMDet 预测图片生成标注 然后使用 Label Studio 进行
  • Istio服务网格详解

    一 架构的发展历史 发展历史时间轴 1 单机小型机时代 第一个计算机网络诞生于1969年 也就是美军的阿帕网 阿帕网能够实现与其它计算机进行联机操作 但是早期仅仅是为了军事目的而服务 2000年初 中国的网民大约890万 很多人都不知道互联
  • Deepin设置接受从Windows的远程桌面连接

    信息化时代 网络越来越普及 电脑越来越多 经常会有使用远程桌面操作多台电脑 PC 服务器 虚拟机 云服务器等等 的情形 例如用远程桌面连接Windows服务器 台式机 Xshell连接Linux服务器 台式机 还有更多的工具 包括QQ远程协
  • 推多米诺

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