838. 推多米诺

2024-02-02 07:32
文章标签 838 多米诺

本文主要是介绍838. 推多米诺,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。

在开始时,我们同时把一些多米诺骨牌向左或向右推。

每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。

同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。

如果同时有多米诺骨牌落在一张垂直竖立的多米诺骨牌的两边,由于受力平衡, 该骨牌仍然保持不变。

就这个问题而言,我们会认为正在下降的多米诺骨牌不会对其它正在下降或已经下降的多米诺骨牌施加额外的力。

给定表示初始状态的字符串 "S" 。如果第 i 张多米诺骨牌被推向左边,则 S[i] = 'L';如果第 i 张多米诺骨牌被推向右边,则 S[i] = 'R';如果第 i 张多米诺骨牌没有被推动,则 S[i] = '.'

返回表示最终状态的字符串。

示例 1

输入:".L.R...LR..L.."
输出:"LL.RR.LLRRLL.."

示例 2

输入:"RR.L"
输出:"RR.L"
说明:第一张多米诺骨牌没有给第二张施加额外的力。

提示:

  1. 0 <= N <= 10^5
  2. 表示多米诺骨牌状态的字符串只含有 'L''R'; 以及 '.';

========================================================================

解题思路:

1.第一个L,前面的 . 全变为L

2.第一个R,前面的 . 不变

3.遍历到R, 继续往前找,如果找到R, 就把两个R之间的变成R,如果找到L 一半R一半L中间那个是 . 

4.如果最后一个元素是 . ,找前面的字母,如果为L,则不变 如果为R,后面的全变成R

这种题属于那种业务题,写一步看一步...

class Solution {public String pushDominoes(String dominoes) {StringBuilder result = new StringBuilder();char[] chars = dominoes.toCharArray();int preIndex = 0;char preStatus = '.';if (chars.length<2){return dominoes;}for (int i = 0; i < chars.length; i++) {if (chars[i]=='.'){if(i==chars.length-1){for(int j = chars.length-1; j > -1; j--){if(chars[j]=='.'&&preStatus!='R'){result.append('.');}else if(chars[j]=='.'){result.append('R');}else{break;}}}continue;}if (chars[i]=='L'){if (preStatus=='L'){appendResult(result,'L',i-preIndex-1);}else if(preStatus=='.'){appendResult(result,'L',i-preIndex);}else{appendResult(result,'R',(i-preIndex-1)/2);if ((i-preIndex-1)%2==1){appendResult(result,'.',1);}appendResult(result,'L',(i-preIndex-1)/2);}}else{if(preStatus=='R'){appendResult(result,'R',i-preIndex-1);}if(preStatus=='.'){appendResult(result,'.',i-preIndex);}if(preStatus=='L'){appendResult(result,'.',i-preIndex-1);}}result.append(chars[i]);preStatus=chars[i];preIndex=i;}return result.toString();}private void appendResult(StringBuilder result,char it,int amount){for (int i = 0; i < amount; i++) {result.append(it);}}
}

 

这篇关于838. 推多米诺的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669932

相关文章

leetcode解题思路分析(九十六)832 - 838 题

翻转图像 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。 在一次遍历中,即进行逆序也进行值的反转,用双指针完成任务 cla

Acwing---838. 堆排序

堆排序 1.题目2.基本思想3.代码实现 1.题目 输入一个长度为 n的整数数列,从小到大输出前 m 小的数。 输入格式 输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。 输出格式 共一行,包含 m 个整数,表示整数数列中前 m 小的数。 数据范围 1 ≤ m ≤ n ≤ 1 0 5 , 1≤m≤n≤10^5, 1≤m≤n≤105, 1 ≤ 数列中元素 ≤

【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )

目录 关于堆的一些知识的回顾  数据结构:堆的特点 "down" 和 "up":维护堆的性质 down up 数据结构:堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识,有关的文章都在专栏里,需要的可以去回顾一下~ http://t.csdnimg.cn/0d6Iqhttp://t.csdnimg.cn/

专业课120+总分380+海南大学838信号与系统考研经验分享-电子信息,信息与通信,人工智能,生物医学

今年专业课120+,总分380+顺利被海大录取,总结一下这一年来的复习经验,希望对大家复习有借鉴。特别提醒这两年专业课海南大学838信号与系统难度比较大,还考察了IDTFT,DTFT等,对离散域的考察颇多,不比一些985学校难度低,所以大家一定要认真对待,千万不要看分数线低就掉以轻心。最后功亏一篑。 数学部分: 高数跟的是武忠祥老师的强化课程,用的就是《高数辅导讲义》,只有辅导讲义配套的严

程序设计大赛---多米诺效应

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-sign

leetcode1007. 行相等的最少多米诺旋转

在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。) 我们可以旋转第 i 张多米诺,使得 A[i] 和 B[i] 的值交换。 返回能使 A 中所有值或者 B 中所有值都相同的最小旋转次数。 如果无法做到,返回 -1. 示例 1: 输入:A = [2,1,2,4,

力扣 790. 多米诺和托米诺平铺(一维dp)

题目描述: 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种形状都可以旋转。 给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 109 + 7 取模 的值。 平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。 示例 1:

力扣 790. 多米诺和托米诺平铺(一维dp)

题目描述: 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种形状都可以旋转。 给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 109 + 7 取模 的值。 平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。 示例 1:

LeetCode 838. 推多米诺

838. 推多米诺 题目描述提示帮助提交记录社区讨论阅读解答 随机一题 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。 在开始时,我们同时把一些多米诺骨牌向左或向右推。 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。 同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。 如果同时有多米诺骨牌落在一张垂直竖立的多米诺骨牌的两边,由于受力平

动态规划45(Leetcode790多米诺和拖米诺平铺)

代码: !!动态规划基础版完结撒花🎉 class Solution {public int numTilings(int n) {long MOD = 1000000007;int[] dp = new int[n+1];dp[0]=1;for(int i=1;i<=n;i++){dp[i]+=dp[i-1]%MOD;dp[i]%=MOD;if(i>=2){dp[i]+=dp[i-2]%MO