1.进入链接(需要登陆) 多米诺骨牌 - MarsCode
2.使用指南(选择题目,编写程序,运行结果)
3.使用提示(!)
可以提供思路,如例1多米诺骨牌: 首先我们可以让AI助手把繁琐冗长的题目简化一下:
然后,我们需要一定的思路,整体和细节都可以详细的询问AI助手:
以下是对每个步骤思路的细化:
1. 创建数据结构来表示骨牌状态:
- 我们选择使用一个列表来存储每个骨牌的状态。列表中的每个元素对应一个骨牌,初始时,所有元素都设置为 0,表示骨牌竖立。
- 当遇到字符 'L' 时,将对应位置的元素设置为 1,表示骨牌向左倒;遇到 'R' 时,设置为 -1,表示骨牌向右倒。
2. 遍历输入字符串更新骨牌状态:
- 从输入字符串的第一个字符开始,依次处理每个字符。
- 根据字符 'L'、'R' 或 '.' ,相应地更新列表中对应位置的骨牌状态值。
3. 计算每个骨牌左右倒下的骨牌数量:
- 对于列表中的每个骨牌位置 i :
- 从位置 i - 1 开始向左遍历,遇到状态为 1 的骨牌就增加左边倒下的骨牌计数,直到遇到状态不为 1 的骨牌停止。
- 从位置 i + 1 开始向右遍历,遇到状态为 -1 的骨牌就增加右边倒下的骨牌计数,直到遇到状态不为 -1 的骨牌停止。
4. 判断骨牌是否力平衡保持竖立:
- 比较每个骨牌左右倒下的骨牌数量。
- 如果数量相等,将该骨牌在列表中的状态重新设置为 0,表示保持竖立。
5. 统计并输出保持竖立的骨牌数量和位置:
- 遍历骨牌状态列表,统计状态为 0 的骨牌数量。
- 同时,将状态为 0 的骨牌位置记录下来。
- 先输出保持竖立的骨牌数量。
- 如果数量不为 0 ,再输出保持竖立的骨牌位置,每个位置之间用空格隔开。
我们发现这个思路是很清晰明了的,接下来就是手动完成代码,和AI辅助完成代码的过程,并且这个是没有答案的,只有自己反复修改以达到学习的过程。所以说豆包刷题平台还是很有用的。 以下是解题代码,思路如上
def pushDominoes(dominoes):
charArray = list(dominoes)
i = 0
while i < len(charArray):
if charArray[i] == '.':
left = i - 1
right = i + 1
while right < len(charArray) and charArray[right] == '.':
right += 1
i = right
leftChar = 'L' if left == -1 else charArray[left]
rightChar = 'R' if right == len(charArray) else charArray[right]
left += 1
right -= 1
if leftChar == 'R' and rightChar == 'L':
while left < right:
charArray[left] = 'R'
charArray[right] = 'L'
left += 1
right -= 1
elif leftChar == 'R' and rightChar == 'R':
while left <= right:
charArray[left] = 'R'
left += 1
elif leftChar == 'L' and rightChar == 'L':
while left <= right:
charArray[left] = 'L'
left += 1
i += 1
return ''.join(charArray)
def solution(num, data):
tmp = pushDominoes(data)
res = []
index = 1
for item in tmp:
if item=='.':
res.append(index)
index+=1
result = '0' if len(res)==0 else str(len(res))+':'+str(res).replace('[','').replace(']','').replace(' ','')
print(result)
return result
if __name__ == "__main__":
# You can add more test cases here
print(solution(14, ".L.R...LR..L..") == "4:3,6,13,14" )
print(solution(5, "R....") == "0" )
print(solution(1, ".") == "1:1" )