🌺题目描述
🌺解题思路
如果一个牌倒在了另外一个已经倒了的牌上,不会给它施加任何力。换句话说:
一个推倒了的牌(
'L'
或'R'
)只能对另一个站着的牌('.'
)起作用。
从左往右依次判断多米诺状态,多米诺一共会有三种情况,。
1.多米诺牌为L
向左推倒,若为'L'继续向左移动,若为' . '也向左移动。
2.多米诺牌为 .
当多米诺牌为' . '时,可以跳过不看。
3.多米诺牌为R
当多米诺牌为'R'时,可以先进行修改,遇到'L'时停止遍历,并折半把后半修改为'L'。
在这里,要注意边界情况。
🌺详细代码
class Solution {
public:
string pushDominoes(string dominoes) {
int n = dominoes.size();
for (int i = 0; i < n; i++)
{
if (dominoes[i] == '.') //多米诺牌为.
{
continue;
}
else if (dominoes[i] == 'L') //多米诺牌为'L'
{
for (int j = i - 1; j >= 0 && dominoes[j] == '.'; j--)
{
dominoes[j] = 'L';
}
continue;
}
else//多米诺牌为'R'
{
int len = 0;
for (int j = i + 1; j < n && dominoes[j] == '.'; j++)
{
dominoes[j] = 'R';
len++;
}
int next = i + len + 1;
if (next == n)
{
break;
}
else if (dominoes[next] == 'R')
{
continue;
}
else//下一位为'L'
{
int pos = i + len / 2 + 1;
if (len % 2 == 1)
{
dominoes[pos++] = '.';
}
while (pos < next)
{
dominoes[pos++] = 'L';
}
i = next;
}
}
}
return dominoes;
}
};
🌺每日金句
总是期待着别人来把我照亮,却忘记了自己也会发光
本人不才,如有错误,或有更好的解法,欢迎各位大佬在评论区讨论。如果对你有帮助的话还请点赞,收藏,关注哦!