Surrounded Regions[hard]

这道题我本来以为很容易就能用DFS做掉的,但是做了一半发现很难写这个stop case. 到底什么算是region被包起来? 上下左右都是X 那当然是,但是如果是一连串的O外部被X包住,每个O的格子周围不可能有4个X。 这个时候要怎么做判断?

我大概写了一下 但是没写出来。。。


看了一下discussion,发现好像BFS才是这道题比较好的解法。好不容易找到一个DFS的思路看看我是missng在哪。。


首先答案先check了一下边界问题,因为top & bot row, left& right col 都是没有X能够围住的。所以那里如果出现了O,是不能被变成X的。答案大神发现只要O的region是链接到边界上的O的,都是不能被包住的。【这个observation太关键】。所以他先从边界出发,把所有边界O链接的O暂时变成Y这个字符。(保证之后不受影响,然后之后再改回来)

之后遍历整个array, 把所有O的地方变成X,因为这些没有链接到边界上,都是被围住的。最后再改Y回O。


BFS的解法:

”dfs, bfs, union-find都可以做, 基本思路是

从在四个边的各个'O'开始搜索, 连在一起的'O'就是不能被包围的, 其余的点都应该设为'X'.

如果选择bfs, 可以把所有边上的所有'O'一起入队, 同时进行bfs“

感觉都是发现了边界问题才知道怎么做。。

先把边界上的O点放入queue里。然后set it = "V"

他这里对边界的处理非常的小心。第二次的loop,他就从i=1开始,到height-2就停了。为了避免重复count。

然后进入BFS,按最早进Queue的先pop处理。 每次pop出一个node,就把上下左右是O的全部先变成‘v’, 然后把该位置放入queue里。等一会再pop出来 重复这个操作。这一步是为了把所有连接边界的为O的地方全部暂时变成'V', 然后保证之后的操作不影响他们。

BFS 做好以后,把board里所有还是"O"的地方变成“X”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,776评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,986评论 19 139
  • 这是一个粉丝经济的时代 这是一个整合资源的时代 想要快速的成为一个整合资源高手,你首先需要打造自己的品牌,有了自己...
    王通专栏阅读 340评论 0 1
  • 大概从去年起开始留心花儿。市场买花、网上订花、户外赏花、自己养花。还不是专业,但是从心底里开始观察四季变幻中的花儿...
    米亚_2529阅读 225评论 0 0
  • 组件暂支持: 微信,QQ,围脖,复制粘贴 集成微信相关的分享 按照官方文档,集成sdkcompile 'com.t...
    Cosecant阅读 1,353评论 3 7