這題其實超簡單,但我一開始沒看清題,以為invalid的輸入也是會出現的。
|
|
所以我最開始的版本用到了并查集,type用來標記不同union的類別(horizontal/vertical/invalid或者undefined)。在union的時候檢查和更新類別。其實和輸入只有valid的情況類似:輸入有invalid時,cnt++僅在左邊和上面的鄰居都是undefined;後者則需要都是’.’。差別是為了排除invalid,要union后記錄type。
|
|
這題其實超簡單,但我一開始沒看清題,以為invalid的輸入也是會出現的。
|
|
所以我最開始的版本用到了并查集,type用來標記不同union的類別(horizontal/vertical/invalid或者undefined)。在union的時候檢查和更新類別。其實和輸入只有valid的情況類似:輸入有invalid時,cnt++僅在左邊和上面的鄰居都是undefined;後者則需要都是’.’。差別是為了排除invalid,要union后記錄type。
|
|
link: https://leetcode.com/problems/surrounded-regions/
Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’.
A region is captured by flipping all ‘O’s into ‘X’s in that surrounded region.
偷看了一下discussion仿照寫的,練習了并查集,基本思路是把所有的’O’連接起來,然後在boundary上的跟一個dummy node union,最後遍歷一遍找和dummy node不相連的所有的’O’;另外一開始我是用map來實現head/rk兩個數組,因為想讓index儲存坐標pair
my solution:
|
|
還可以直接floodfill搜索(相當於DFS),注意遞歸版本會爆棧,手動寫個stack就可以。
|
|
updated Dec 13:
BFS:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
空間是O(1)的Morris Inorder traversal解法。
|
|
|
|