题目

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

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

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

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

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

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

  返回表示最终状态的字符串。来源:力扣(LeetCode)

解答

方案一

 骨牌会被相邻的骨牌方向所影响,如果初始状态确定,则最终结果就会同步确定;不会因时间而改变;使用指针A和指针B;

  1. 先找出初始状态下,所有不为.的骨牌位置

  2. 推测相邻骨牌<A,B>之间变化的骨牌状态:

    • 如果A左侧再没有变化:

      • 如果A=L,则左侧所有都等于L
      • 否则等于.
    • 如果B左侧再没有变化:

      • 如果A=R,则左侧所有都等于R
      • R则等于.
    • 如果<A,B><L,R>,则中间所有不变

    • 如果<A,B><L,L>,则中间所有为L

    • 如果<A,B><R,R>,则中间所有为R

    • 如果<A,B><R,L>,则向中间逼近,中心位置的骨牌.方向不变,.左侧为R,右侧为L

1
2
3
public String pushDominoes(String dominoes) {
Character left,right;
}