前言:这个题目本来打算一次遍历来写,但是写的时候发现有点难搞,后面发现是 bfs ,但是这个bfs 不是很好处理,后面看了题解,颇有感触
这个和堆处理的最短路是一样的,在取出一个位置的时候才对其进行赋值,因为如果有两个位置可以到达这个位置,那么不好在前两个位置的时候进行处理,在取出一个位置的时候就可以判断其受力是一边还是两边
题目地址
class Solution:def pushDominoes(self, dominoes: str) -> str:q = deque()n = len(dominoes)ti = [-1]*(n)li = [[] for _ in range(n)]for i,va in enumerate(dominoes):if va != '.':ti[i] = 0q.append(i)li[i].append(va)ans = [u for u in dominoes]while q:idx = q.popleft()if len(li[idx])!=1:continueans[idx] = li[idx][0]ni = idx-1 if ans[idx]=='L' else idx+1if ni<0 or ni>=n:continueif ti[ni]==-1:ti[ni] = ti[idx]+1li[ni].append(ans[idx])q.append(ni)elif ti[ni]==ti[idx]+1:li[ni].append(ans[idx])return "".join(ans)