# LeetCode - 0838. Push Dominoes ### 題目網址:https://leetcode.com/problems/push-dominoes/ ###### tags: `LeetCode` `Medium` `模擬` ```cpp= /* -LeetCode format- Problem: 838. Push Dominoes Difficulty: Medium by Inversionpeter */ static const auto Initialize = []{ ios::sync_with_stdio(false); cin.tie(nullptr); return nullptr; }(); inline void PushdownLeft(string &states, int nowAt) { while ((--nowAt) >= 0 && states[nowAt] == '.') states[nowAt] = 'L'; } inline void PushdownRight(string &states, int nowAt) { if (nowAt == -1) return; while ((++nowAt) != states.size() && states[nowAt] == '.') states[nowAt] = 'R'; } inline void PushdownLeftNRight(string &states, int &towardRight, int towardLeft) { if (towardRight == -1) { PushdownLeft(states, towardLeft); return; } while ((++towardRight) < (--towardLeft)) { states[towardRight] = 'R'; states[towardLeft] = 'L'; } towardRight = -1; } class Solution { public: string pushDominoes(string dominoes) { int rightMostR = -1; for (int i = 0; i != dominoes.size(); ++i) switch (dominoes[i]) { case 'L': PushdownLeftNRight(dominoes, rightMostR, i); break; case 'R': PushdownRight(dominoes, rightMostR); rightMostR = i; break; } PushdownRight(dominoes, rightMostR); return dominoes; } }; ```