Advertisement
838. Push Dominoes
MediumView on LeetCode
Time: O(n)
Space: O(n)
Approach
Two-pass force propagation; L→R assigns positive force for 'R', R→L assigns negative force for 'L'; final state determined by net force sign.
838.cs
C#
// Approach: Two-pass force propagation; L→R assigns positive force for 'R', R→L assigns negative force for 'L'; final state determined by net force sign.
// Time: O(n) Space: O(n)
public class Solution
{
public string PushDominoes(string dominoes)
{
int n = dominoes.Length;
int[] forces = new int[n];
// Left to Right: Apply 'R' forces
int force = 0;
for (int i = 0; i < n; i++)
{
if (dominoes[i] == 'R')
force = n; // Max possible force
else if (dominoes[i] == 'L')
force = 0; // Reset on encountering 'L'
else
force = Math.Max(force - 1, 0);
forces[i] += force;
}
// Right to Left: Apply 'L' forces
force = 0;
for (int i = n - 1; i >= 0; i--)
{
if (dominoes[i] == 'L')
force = n; // Max possible force
else if (dominoes[i] == 'R')
force = 0; // Reset on encountering 'R'
else
force = Math.Max(force - 1, 0);
forces[i] -= force;
}
// Build final result based on net force
char[] result = new char[n];
for (int i = 0; i < n; i++)
{
if (forces[i] > 0)
result[i] = 'R';
else if (forces[i] < 0)
result[i] = 'L';
else
result[i] = '.';
}
return new string(result);
}
}Advertisement
Was this solution helpful?