JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-10-23
目录

推多米诺Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

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

# 思路

toCharArray

思路很简单,已经是L或R的字符,肯定不会变

字符为.的,可能会因为两边的字符是L或R而改变

因此只要判断连续...两边的字符情况就可以

一共有三种情况 ,分类处理即可

# 解法


class Solution {
    public String pushDominoes(String dominoes) {
        int n = dominoes.length();
        char[] array = dominoes.toCharArray();
        for (int i = 0; i < n; i++) {
            if (array[i] == '.') {
                int end = i;
                while (end + 1 < n && array[end + 1] == '.') end++;
                char left = i - 1 > -1 ? array[i - 1] : 'L';
                char right = end + 1 < n ? array[end + 1] : 'R';
                if (left == right) for (int j = i; j <= end; j++) array[j] = left;
                else if (left == 'R' && right == 'L') {
                    int cnt = (end - i + 1) / 2;
                    for (int j = 0; j < cnt; j++) {
                        array[i + j] = 'R';
                        array[end - j] = 'L';
                    }
                }
                i = end;
            }
        }
        return new String(array);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式