美文网首页
838. 推多米诺

838. 推多米诺

作者: Abeants | 来源:发表于2022-02-22 11:11 被阅读0次

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' 或 '.'

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

解题思路及方法

这道题读起来很复杂,但实际上我们发现,按照规则,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。所以该怎么倒的牌不会发生变化,我们只需要考虑'.'两边的情况,判断其如何倒即可。

遍历数组,我们遇到'.'后,判断其左右两边的状态,如果'.'连续,就找到连续后右边的字符。说一下越界的情况,如果数组开头是'.',我们就设其左边是'L',这样不会对当前'.'施加力;同理,如果末尾是'.',我们就设其右边是'R'。判断:

  • 当两边字符一致,'.'顺这字符一起倒;
  • 当左边为'R',右边为'L',则向中间倒;
  • 其余情况'.'均不倒。
class Solution {
    public String pushDominoes(String dominoes) {
        int n = dominoes.length();
        char[] res = dominoes.toCharArray();

        for (int i = 0; i < n; i++) {
            // 只用修改‘.’
            if (res[i] == '.') {
                int idx = i;
                // 左边字符
                char left = i - 1 >= 0 ? res[i - 1] : 'L';
                // 右边字符
                while (idx + 1 < n && res[idx + 1] == '.') idx++;
                char right = idx + 1 < n ? res[idx + 1] : 'R';
                // 两边相等,朝一边倒向
                if (left == right) {
                    while (i <= idx) res[i++] = right;
                } else if (left == 'R' && right == 'L') {
                    // 两边方向相反,从两侧向中间倒
                    while (i < idx) {
                        res[i++] = 'R';
                        res[idx--] = 'L';
                    }
                }
                left = right;
            }
        }
        
        return new String(res);
    }
}

结果如下:

相关文章

  • 838. 推多米诺

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

  • 838. 推多米诺(Python)

    难度:★★★☆☆类型:字符串方法:模拟 力扣链接请移步本题传送门[https://leetcode-cn.com/...

  • 2022-02-21 838. 推多米诺

    java版本:

  • 晨读|你要明白和相信,耐心、长期、多米诺效应

    2017-05-27 剽悍晨读 多米诺效应 1983年,怀特里德发现,多米诺骨牌不仅能以一推多,而且能以小推大。2...

  • 多米诺布局逆推思维

    一直再说逆向思维;用户思维;何谓逆向思维呢? 简单的说可以把硬币正反面看成两个极;1元的硬币正面为阿拉伯数字一,背...

  • 多米诺骨牌效应

    你会玩多米诺骨牌吗?这是一种有趣的游戏。 多米诺骨牌的玩法是一个意大利女孩多米诺发明的 。到19世纪,多米诺已经成...

  • Leetcode 838. Push Dominoes

    文章作者:Tyan博客:noahsnail.com[http://noahsnail.com] | CSDN[ht...

  • 4.12

    838.感恩这些日子自己又没有精进,允许自己的各种情绪。 839.感恩昨晚突然有意识想到在中午记录感恩日记,让我的...

  • 多米诺起床仪式

    大家都听过,多米诺骨牌,但是不一定知道多米诺起床仪式吧。这是个什么东东呢? 多米诺起床仪式是《漫步...

  • 比较笨但精准吸粉的工具 让增粉变得更简单

    来源:田泽湘《多米诺商业系统》课程节选,有删改。 微信微商,养活了一批代理,养活了一批招商培训的人。传统PC端的推...

网友评论

      本文标题:838. 推多米诺

      本文链接:https://www.haomeiwen.com/subject/dtcglrtx.html