看到这种题目,思路很简单,就是去看,给了最初的位置,那么我们完全可以根据遍历字符串的时候遍历到的字符去对我们最初的位置进行改变,如果不在给出的范围之内,就停止。
还需要注意一点,就是它可以从字符串随机一个位置去开始移动,所以我们还需要去遍历整个字符串的位置。代码放在下面了,注释在其中也有。
class Solution:
def executeInstructions(self, n: int, startPos: List[int], s: str) -> List[int]:
list1 = [] # 这里用来存放要返回的列表
for i in range(len(s)): # 循环遍历整个字符串,从前往后
list2 = startPos.copy() # 注意这里不要直接赋值,要不然随着list2的改变原来的列表也早就改变了
count = 0
for t in range(i, len(s)): # 根据不同的字符去进行不同的加减
if s[t] == "L":
list2[1] -=1
count += 1
elif s[t] == "R":
list2[1] += 1
count += 1
elif s[t] == "U":
list2[0] -= 1
count += 1
elif s[t] == "D":
list2[0] += 1
count += 1
if list2[0] < 0 or list2[0] > n-1 or list2[1] > n-1 or list2[1] < 0:
# 这里就是看是不是有超出范围的,如果有的话,我们count加了一,需要减去再停止
count -= 1
break
list1.append(count)
return list1