注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
本帖最后由 xiaoxiao0801 于 2016-1-21 06:08 编辑
大家好 我一直做不出 Leetcode[130] Surrounded Region这题 知道地里高手如云 诚心欢迎大神们指点
我写了个解法用了它的一个test case, 跑的结果和它expected的是一样的但是跑了50多秒 泥萌知道我有多渣勒嘛快来尽情的鄙视我 然后我不知道其他test case能不能过去
我想的是 对于board里每个格子[i,j] 先不管它是不是在边界上只要它是'O'并未被访问过 就BFS访问它的上下左右(检查上下左右是否越界 挑出没越界并且为'O'并且没被访问过的 押入队列) 一路上记录能访问到的所有格子 等访问完了 如果这个记录中有在边界上的点 不管;否则把记录里所有格子全改成'X' 这样对于board里所有点都访问下
先跪谢![i][/i]- import Queue
- class Solution(object):
- def solve(self,board):
- if board==[]:
- return
- row,col=len(board),len(board[1])
- visited=[[False]*col for i in range(row)]
- for i in range(row):
- for j in range(col):
- if board[i][j]=="O" and visited[i][j]==False:
- tmp=[]
- if self.helper(board,visited,i,j,row,col,tmp)==True:
- for t in tmp:
- board[t[0]]=board[t[0]][:t[1]]+"X"+board[t[0]][t[1]+1:]
- def helper(self,board,visited,i,j,row,col,tmp):
- flag=True
- q = Queue.Queue()
- q.put([i,j])
- while q.empty()==False:
- [i,j]=q.get()
- visited[i][j]=True
- tmp.append([i,j])
- if i==0 or i==row-1 or j==0 or j==col-1:
- flag=False
- for ajac in [[i-1,j],[i+1,j],[i,j-1],[i,j+1]]:
- if ajac[0]>=0 and ajac[0]<row and ajac[1]>=0 and ajac[1]<col and board[ajac[0]][ajac[1]]=="O" and visited[ajac[0]][ajac[1]]==False:
- q.put(ajac)
- return flag
复制代码 |