🌺题目描述

🌺解题思路
如果一个牌倒在了另外一个已经倒了的牌上,不会给它施加任何力。换句话说:
一个推倒了的牌(
'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;
}
};
🌺每日金句
总是期待着别人来把我照亮,却忘记了自己也会发光

本人不才,如有错误,或有更好的解法,欢迎各位大佬在评论区讨论。如果对你有帮助的话还请点赞,收藏,关注哦!

本文介绍了如何解决838题——推多米诺的问题,通过分析多米诺骨牌的三种状态,给出了详细的解题思路和C++代码实现。解题过程中重点考虑了'L'和'R'牌的影响范围以及边界条件。同时,文章鼓励读者思考并分享不同的解法。
544

被折叠的 条评论
为什么被折叠?



