力扣解法汇总838-推多米诺
汇总 力扣 解法
2023-09-11 14:18:53 时间
原题链接:力扣
描述:
n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。
每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。
如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。
就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。
给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态,其中:
dominoes[i] = 'L',表示第 i 张多米诺骨牌被推向左侧,
dominoes[i] = 'R',表示第 i 张多米诺骨牌被推向右侧,
dominoes[i] = '.',表示没有推动第 i 张多米诺骨牌。
返回表示最终状态的字符串。
示例 1:
输入:dominoes = "RR.L"
输出:"RR.L"
解释:第一张多米诺骨牌没有给第二张施加额外的力。
示例 2:
输入:dominoes = ".L.R...LR..L.."
输出:"LL.RR.LLRRLL.."
提示:
n == dominoes.length
1 <= n <= 105
dominoes[i] 为 'L'、'R' 或 '.'
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/push-dominoes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
* 解题思路: * 一张牌往哪边倒,只有两个因素决定,当前的方向,以及起始位置的方向。 * 所以就分拆成9种情况进行分析。比如起始'.',当前'L',那么起始和当前之间全部设置为L。
代码:
public class Solution838 {
public String pushDominoes(String dominoes) {
char[] chars = dominoes.toCharArray();
int start = 0;
for (int i = 0; i < chars.length; i++) {
char currentChar = chars[i];
char startChar = chars[start];
if (startChar == '.') {
if (currentChar == '.') {
continue;
}
if (currentChar == 'L') {
setRangeValue(chars, start, i, currentChar);
continue;
}
if (currentChar == 'R') {
start = i;
continue;
}
}
if (startChar == 'L') {
start = i;
if (currentChar == '.') {
continue;
}
if (currentChar == 'L') {
continue;
}
if (currentChar == 'R') {
continue;
}
continue;
}
if (startChar == 'R') {
if (currentChar == '.') {
if (i == chars.length - 1) {
setRangeValue(chars, start, i, 'R');
break;
}
continue;
}
if (currentChar == 'R') {
setRangeValue(chars, start, i, 'R');
start = i;
continue;
}
if (currentChar == 'L') {
int length = i - start;
int middle = length / 2;
if (length % 2 == 0) {
middle--;
}
setRangeValue(chars, start, start + middle, 'R');
setRangeValue(chars, i - middle, i, 'L');
start = i;
continue;
}
continue;
}
}
return new String(chars);
}
private void setRangeValue(char[] chars, int start, int end, char c) {
for (int i = start; i <= end; i++) {
chars[i] = c;
}
}
}
相关文章
- 力扣解法汇总640-求解方程
- 力扣解法汇总504-七进制数
- 力扣解法汇总1238. 循环码排列
- 力扣解法汇总1684. 统计一致字符串的数目
- 力扣解法汇总2293. 极大极小游戏
- 力扣解法汇总1750. 删除字符串两端相同字符后的最短长度
- 力扣解法汇总698-划分为k个相等的子集
- 力扣解法汇总1608-特殊数组的特征值
- 力扣解法汇总1475-商品折扣后的最终价格
- 力扣解法汇总593-有效的正方形
- 力扣解法汇总1260-二维网格迁移
- 力扣解法汇总1217-玩筹码
- 力扣解法汇总面试题 01.05. 一次编辑
- 力扣解法汇总427-建立四叉树
- 力扣解法汇总417-太平洋大西洋水流问题
- 力扣解法汇总2029-石子游戏 IX
- 力扣解法汇总23-合并K个升序链表
- 力扣解法汇总12-整数转罗马数字