959. Regions Cut By Slashes
题目来源:959. Regions Cut By Slashes
https://leetcode.com/problems/regions-cut-by-slashes/
自我感觉难度/真实难度: 写题时间时长:
题意:
分析:思路就是把每一个符号位置,扩展成3*3的小格子,然后把自己的边界设为1就可以了,最后使用数区域的方法就可以了,DFS一下,看有多少区域
自己的代码:
import numpy class Solution(object): def regionsBySlashes(self, g): """ :type grid: List[str] :rtype: int """ self.l=len(g)*3 count=0 b=numpy.zeros((self.l,self.l)) for i in range(self.l/3): for j in range(self.l/3): if g[i][j] == '/': b[i * 3][j * 3 + 2] = b[i * 3 + 1][j * 3 + 1] = b[i * 3 + 2][j * 3] = 1 if g[i][j] == '\\': b[i * 3][j * 3] = b[i * 3 + 1][j * 3 + 1] = b[i * 3 + 2][j * 3 + 2] = 1; for i in range(self.l): for j in range(self.l): if b[i][j]==0: count+=1 self.one(i,j,b) return count def one(self,x,y,a): left_x=x-1 right_x=x+1 up_y=y-1 down_y=y+1 if 0<=x<self.l and 0<=y<self.l and a[x,y]==0: a[x][y]=1 self.one(left_x,y,a) self.one(right_x,y,a) self.one(x,up_y,a) self.one(x,down_y,a) else: return
代码还是要讲求简介
代码效率/结果:
优秀代码:
class Solution(object): def regionsBySlashes(self, grid): """ :type grid: List[str] :rtype: int """ # colors = [down, right] N = len(grid) mapping = collections.defaultdict(set) colors = [[i,0] for i in xrange(N)] color = N-1 for row in grid: # print colors, row for i, ch in enumerate(row): if i > 0: right = colors[i-1][1] else: color += 1 right = color down = colors[i][0] # print i, ch, right, down if ch == ' ': if right != down: mapping[right].add(down) mapping[ down].add(right) colors[i] = [down, down] elif ch == '/': if right != down: mapping[right].add(down) mapping[ down].add(right) color += 1 colors[i] = [color, color] else: colors[i] = [right, down] # print colors color += 1 # print color, mapping visited, count = [False] * color, 0 for item in xrange(color): if visited[item]: continue count += 1 level, visited[item] = [item], True while level: co = level.pop() for c in mapping[co]: if not visited[c]: level.append(c) visited[c] = True return count
44m
但是目前还没有看懂这么写出来的